A Standalone MPQUIC implementation in pure Go

Inspired and based on: https://multipath-quic.org/2017/12/09/artifacts-available.html

mpquic_actor_critic_v1 is a multipath implementation of the quic-go protocol

Roadmap

  • Implement different Machine Learning based Schedulers
  • DONE: Make this completely standalone, so that anyone can import this library without manual

This version of mpquic_actor_critic_v1 is not dependent on quic-go, and can be installed as a standalone package

Pre-Requisites

  • Install hdf5 library in your PC before executing this

    In mac: brew install hdf5

    In Ubuntu: sudo apt-get install libhdf5-serial-dev

  • Run export GOPRIVATE=github.com/shravan9912 in command-line before importing private-packages

  • Then go get -t -u ./...

Guides

We currently support Go 1.14+

Essential Environment Variables: OUTPUT_DIR="ABSOLUTE_PATH_TO_OUTPUT_DIR is needed for
scheduler implementation in native application

Choosing Schedulers:

// Available Schedulers: round_robin, low_latency
// Default Scheduler: round_robin
// To choose a custom scheduler you can follow the below approach:
cfgServer := &quic.Config{
	CreatePaths: true,
	Scheduler: 'round_robin', // Or any of the above mentioned scheduler
	WeightsFile: '/file/path'
	Training: true,
	Epsilon: 0.0001
	AllowedCongestion: 50
	DumpExperiences: true
}  // If nothing is mentioned round_robin will be default

Installing and updating dependencies:

go get -t -u ./...

Running tests:

go test ./...

Example Implementation

An application that does File Transfer using mpquic_actor_critic_v1 has been shown at MPQUIC-FTP

In case of any issue accessing it, please reach out to repository owner

Contributing

We are always happy to welcome new contributors! We have a number of self-contained issues that are suitable for first-time contributors, they are tagged with want-help. If you have any questions, please feel free to reach out by opening an issue or leaving a comment.

Acknowledgment

  • Thanks to Qdeconinck for starting this amazing work

GitHub

View Github