Browse Source

Add router option

Artem Lukyanov 3 years ago
parent
commit
c5885425d6
5 changed files with 22 additions and 0 deletions
  1. 5 0
      cmd/main.go
  2. 2 0
      cmd/util.go
  3. 1 0
      pkg/edgevpn/config.go
  4. 7 0
      pkg/edgevpn/edgevpn.go
  5. 7 0
      pkg/edgevpn/options.go

+ 5 - 0
cmd/main.go

@@ -42,6 +42,11 @@ func MainFlags() []cli.Flag {
 			EnvVar: "ADDRESS",
 			Value:  "10.1.0.1/24",
 		},
+		&cli.StringFlag{
+			Name:   "router",
+			Usage:  "Sends all packets to this node",
+			EnvVar: "ROUTER",
+		},
 		&cli.StringFlag{
 			Name:   "interface",
 			Usage:  "Interface name",

+ 2 - 0
cmd/util.go

@@ -135,6 +135,7 @@ func displayStart(e *edgevpn.EdgeVPN) {
 func cliToOpts(c *cli.Context) []edgevpn.Option {
 	config := c.String("config")
 	address := c.String("address")
+	router := c.String("router")
 	iface := c.String("interface")
 	logLevel := c.String("log-level")
 	libp2plogLevel := c.String("libp2p-log-level")
@@ -179,6 +180,7 @@ func cliToOpts(c *cli.Context) []edgevpn.Option {
 		edgevpn.WithInterfaceMTU(c.Int("mtu")),
 		edgevpn.WithPacketMTU(1420),
 		edgevpn.WithInterfaceAddress(address),
+		edgevpn.WithRouterAddress(router),
 		edgevpn.WithInterfaceName(iface),
 		edgevpn.WithInterfaceType(water.TUN),
 		edgevpn.NetLinkBootstrap(true),

+ 1 - 0
pkg/edgevpn/config.go

@@ -36,6 +36,7 @@ type Config struct {
 	Interface        *water.Interface
 	InterfaceName    string
 	InterfaceAddress string
+	RouterAddress    string
 	InterfaceMTU     int
 	MTU              int
 	DeviceType       water.DeviceType

+ 7 - 0
pkg/edgevpn/edgevpn.go

@@ -215,6 +215,10 @@ func streamHandler(ledger *blockchain.Ledger, ifce *water.Interface) func(stream
 // redirects packets from the interface to the node using the routing table in the blockchain
 func (e *EdgeVPN) readPackets(ledger *blockchain.Ledger, ifce *water.Interface) error {
 	ctx := context.Background()
+	ip, _, err := net.ParseCIDR(e.config.InterfaceAddress)
+	if err != nil {
+		return err
+	}
 	for {
 		var frame ethernet.Frame
 		frame.Resize(e.config.MTU)
@@ -232,6 +236,9 @@ func (e *EdgeVPN) readPackets(ledger *blockchain.Ledger, ifce *water.Interface)
 		}
 
 		dst := header.Dst.String()
+		if e.config.RouterAddress != "" && header.Src.Equal(ip) {
+			dst = e.config.RouterAddress
+		}
 
 		// Query the routing table
 		value, found := ledger.GetKey(MachinesLedgerKey, dst)

+ 7 - 0
pkg/edgevpn/options.go

@@ -53,6 +53,13 @@ func WithInterfaceAddress(i string) func(cfg *Config) error {
 	}
 }
 
+func WithRouterAddress(i string) func(cfg *Config) error {
+	return func(cfg *Config) error {
+		cfg.RouterAddress = i
+		return nil
+	}
+}
+
 func WithInterfaceMTU(i int) func(cfg *Config) error {
 	return func(cfg *Config) error {
 		cfg.InterfaceMTU = i