|
@@ -27,6 +27,7 @@ import (
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap"
|
|
"gopkg.in/yaml.v2"
|
|
"gopkg.in/yaml.v2"
|
|
|
|
|
|
|
|
+ "github.com/mudler/edgevpn/pkg/blockchain"
|
|
edgevpn "github.com/mudler/edgevpn/pkg/edgevpn"
|
|
edgevpn "github.com/mudler/edgevpn/pkg/edgevpn"
|
|
)
|
|
)
|
|
|
|
|
|
@@ -35,10 +36,46 @@ This program comes with ABSOLUTELY NO WARRANTY.
|
|
This is free software, and you are welcome to redistribute it
|
|
This is free software, and you are welcome to redistribute it
|
|
under certain conditions.`
|
|
under certain conditions.`
|
|
|
|
|
|
|
|
+func cliToOpts(l *zap.Logger, c *cli.Context) []edgevpn.Option {
|
|
|
|
+ config := c.String("config")
|
|
|
|
+ address := c.String("address")
|
|
|
|
+ iface := c.String("interface")
|
|
|
|
+ token := c.String("token")
|
|
|
|
+ if config == "" &&
|
|
|
|
+ token == "" {
|
|
|
|
+ l.Sugar().Fatal("EDGEVPNCONFIG or EDGEVPNTOKEN not supplied. At least a config file is required")
|
|
|
|
+ }
|
|
|
|
+ return []edgevpn.Option{
|
|
|
|
+ edgevpn.Logger(l),
|
|
|
|
+ edgevpn.LogLevel(log.LevelInfo),
|
|
|
|
+ edgevpn.MaxMessageSize(2 << 20), // 2MB
|
|
|
|
+ edgevpn.WithInterfaceMTU(1450),
|
|
|
|
+ edgevpn.WithPacketMTU(1420),
|
|
|
|
+ edgevpn.WithInterfaceAddress(address),
|
|
|
|
+ edgevpn.WithInterfaceName(iface),
|
|
|
|
+ edgevpn.WithMaxBlockChainSize(1000),
|
|
|
|
+ edgevpn.WithInterfaceType(water.TUN),
|
|
|
|
+ edgevpn.NetLinkBootstrap(true),
|
|
|
|
+ edgevpn.FromBase64(token),
|
|
|
|
+ edgevpn.FromYaml(config),
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
func main() {
|
|
func main() {
|
|
l, _ := zap.NewProduction()
|
|
l, _ := zap.NewProduction()
|
|
defer l.Sync() // flushes buffer, if any
|
|
defer l.Sync() // flushes buffer, if any
|
|
|
|
|
|
|
|
+ common := []cli.Flag{&cli.StringFlag{
|
|
|
|
+ Name: "config",
|
|
|
|
+ Usage: "Specify a path to a edgevpn config file",
|
|
|
|
+ EnvVar: "EDGEVPNCONFIG",
|
|
|
|
+ },
|
|
|
|
+ &cli.StringFlag{
|
|
|
|
+ Name: "token",
|
|
|
|
+ Usage: "Specify an edgevpn token in place of a config file",
|
|
|
|
+ EnvVar: "EDGEVPNTOKEN",
|
|
|
|
+ }}
|
|
|
|
+
|
|
app := &cli.App{
|
|
app := &cli.App{
|
|
Name: "edgevpn",
|
|
Name: "edgevpn",
|
|
Version: internal.Version,
|
|
Version: internal.Version,
|
|
@@ -46,21 +83,11 @@ func main() {
|
|
Usage: "edgevpn --config /etc/edgevpn/config.yaml",
|
|
Usage: "edgevpn --config /etc/edgevpn/config.yaml",
|
|
Description: "edgevpn uses libp2p to build an immutable trusted blockchain addressable p2p network",
|
|
Description: "edgevpn uses libp2p to build an immutable trusted blockchain addressable p2p network",
|
|
Copyright: copyRight,
|
|
Copyright: copyRight,
|
|
- Flags: []cli.Flag{
|
|
|
|
|
|
+ Flags: append([]cli.Flag{
|
|
&cli.BoolFlag{
|
|
&cli.BoolFlag{
|
|
Name: "g",
|
|
Name: "g",
|
|
Usage: "Generates a new configuration and prints it on screen",
|
|
Usage: "Generates a new configuration and prints it on screen",
|
|
},
|
|
},
|
|
- &cli.StringFlag{
|
|
|
|
- Name: "config",
|
|
|
|
- Usage: "Specify a path to a edgevpn config file",
|
|
|
|
- EnvVar: "EDGEVPNCONFIG",
|
|
|
|
- },
|
|
|
|
- &cli.StringFlag{
|
|
|
|
- Name: "token",
|
|
|
|
- Usage: "Specify an edgevpn token in place of a config file",
|
|
|
|
- EnvVar: "EDGEVPNTOKEN",
|
|
|
|
- },
|
|
|
|
&cli.StringFlag{
|
|
&cli.StringFlag{
|
|
Name: "address",
|
|
Name: "address",
|
|
Usage: "VPN virtual address",
|
|
Usage: "VPN virtual address",
|
|
@@ -72,8 +99,31 @@ func main() {
|
|
Usage: "Interface name",
|
|
Usage: "Interface name",
|
|
Value: "edgevpn0",
|
|
Value: "edgevpn0",
|
|
EnvVar: "IFACE",
|
|
EnvVar: "IFACE",
|
|
|
|
+ }}, common...),
|
|
|
|
+
|
|
|
|
+ Commands: []cli.Command{{
|
|
|
|
+ Name: "join",
|
|
|
|
+ Description: "join the network without activating any interface",
|
|
|
|
+ Flags: common,
|
|
|
|
+ Action: func(c *cli.Context) error {
|
|
|
|
+ e := edgevpn.New(cliToOpts(l, c)...)
|
|
|
|
+
|
|
|
|
+ mw, err := e.MessageWriter()
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ledger := blockchain.New(mw, 1000)
|
|
|
|
+
|
|
|
|
+ // Join the node to the network, using our ledger
|
|
|
|
+ if err := e.Join(ledger); err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for {
|
|
|
|
+ }
|
|
},
|
|
},
|
|
- },
|
|
|
|
|
|
+ }},
|
|
|
|
|
|
Action: func(c *cli.Context) error {
|
|
Action: func(c *cli.Context) error {
|
|
if c.Bool("g") {
|
|
if c.Bool("g") {
|
|
@@ -94,48 +144,24 @@ func main() {
|
|
os.Exit(0)
|
|
os.Exit(0)
|
|
}
|
|
}
|
|
|
|
|
|
- start(l, c)
|
|
|
|
- return nil
|
|
|
|
- },
|
|
|
|
- }
|
|
|
|
|
|
+ e := edgevpn.New(cliToOpts(l, c)...)
|
|
|
|
|
|
- err := app.Run(os.Args)
|
|
|
|
- if err != nil {
|
|
|
|
- l.Sugar().Fatal(err)
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-func start(l *zap.Logger, c *cli.Context) {
|
|
|
|
- config := c.String("config")
|
|
|
|
- address := c.String("address")
|
|
|
|
- iface := c.String("interface")
|
|
|
|
- token := c.String("token")
|
|
|
|
|
|
+ l.Sugar().Info(copyRight)
|
|
|
|
|
|
- opts := []edgevpn.Option{
|
|
|
|
- edgevpn.Logger(l),
|
|
|
|
- edgevpn.LogLevel(log.LevelInfo),
|
|
|
|
- edgevpn.MaxMessageSize(2 << 20), // 2MB
|
|
|
|
- edgevpn.WithInterfaceMTU(1450),
|
|
|
|
- edgevpn.WithPacketMTU(1420),
|
|
|
|
- edgevpn.WithInterfaceAddress(address),
|
|
|
|
- edgevpn.WithInterfaceName(iface),
|
|
|
|
- edgevpn.WithMaxBlockChainSize(1000),
|
|
|
|
- edgevpn.WithInterfaceType(water.TUN),
|
|
|
|
- edgevpn.NetLinkBootstrap(true),
|
|
|
|
- edgevpn.FromBase64(token),
|
|
|
|
- edgevpn.FromYaml(config),
|
|
|
|
- }
|
|
|
|
|
|
+ l.Sugar().Infof("Version: %s commit: %s", internal.Version, internal.Commit)
|
|
|
|
|
|
- e := edgevpn.New(opts...)
|
|
|
|
|
|
+ l.Sugar().Info("Start")
|
|
|
|
|
|
- l.Sugar().Info(copyRight)
|
|
|
|
|
|
+ if err := e.Start(); err != nil {
|
|
|
|
+ l.Sugar().Fatal(err.Error())
|
|
|
|
+ }
|
|
|
|
|
|
- l.Sugar().Infof("Version: %s commit: %s", internal.Version, internal.Commit)
|
|
|
|
- if config == "" && token == "" {
|
|
|
|
- l.Sugar().Fatal("EDGEVPNCONFIG or EDGEVPNTOKEN not supplied. config file is required")
|
|
|
|
|
|
+ return nil
|
|
|
|
+ },
|
|
}
|
|
}
|
|
- l.Sugar().Info("Start")
|
|
|
|
|
|
|
|
- if err := e.Start(); err != nil {
|
|
|
|
- l.Sugar().Fatal(err.Error())
|
|
|
|
|
|
+ err := app.Run(os.Args)
|
|
|
|
+ if err != nil {
|
|
|
|
+ l.Sugar().Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
}
|