]> ruderich.org/simon Gitweb - linux-network-namespace-labs/linux-network-namespace-labs.git/commitdiff
config: "link": make net-name optional for unnumbered ptp-links master
authorSimon Ruderich <simon@ruderich.org>
Wed, 30 Apr 2025 08:14:40 +0000 (10:14 +0200)
committerSimon Ruderich <simon@ruderich.org>
Wed, 30 Apr 2025 08:14:40 +0000 (10:14 +0200)
Helped-by: Luca <luca@daerich.com>
README.adoc
config.go

index 1ec8238fd7c831d05e830c55f0c73d00054e2489..a3bc4581aea8baa505aceac823816aac169decf0 100644 (file)
@@ -141,14 +141,15 @@ new interface "lo2".
 
 === Option "link"
 
 
 === Option "link"
 
-    "link" <node> <node> <net-name> ["l3"]
+    "link" <node> <node> <net-name>|"-" ["l3"]
 
 "link" creates links between nodes. The IP addresses are taken from the given
 
 "link" creates links between nodes. The IP addresses are taken from the given
-network name. /31 is used for IPv4- and /127 for IPv6-prefixes. The MAC
-address is not static and allocated by the kernel. The link is named after the
-node "on the other side". Multiple links can be created between two nodes. In
-this case "_2", "_3", etc. is appended to the interface name. By default veth
-interfaces are used, adding "l3" changes this to netkit which provide a
+network name. /31 is used for IPv4- and /127 for IPv6-prefixes. If "-" is used
+as net-name then no addresses are assigned (useful for unnumbered links). The
+MAC address is not static and allocated by the kernel. The link is named after
+the node "on the other side". Multiple links can be created between two nodes.
+In this case "_2", "_3", etc. is appended to the interface name. By default
+veth interfaces are used, adding "l3" changes this to netkit which provide a
 layer-3 connection without needing ARP (requires kernel 6.7, iproute2 6.8).
 
 === Option "cmd"
 layer-3 connection without needing ARP (requires kernel 6.7, iproute2 6.8).
 
 === Option "cmd"
index 2773b8dacc4bba8289b6bafb80e423286a4e9ee5..11963e65d61c52c021144e92ceff5fd708299e73 100644 (file)
--- a/config.go
+++ b/config.go
@@ -93,7 +93,7 @@ func LoadConfig(path string) (*Config, error) {
                        usage = `"node" <name> [<loopback-net-name>...]`
                        err = parseConfigNode(&cfg, xs[1:])
                case "link":
                        usage = `"node" <name> [<loopback-net-name>...]`
                        err = parseConfigNode(&cfg, xs[1:])
                case "link":
-                       usage = `"link" <node> <node> <net-name> ["l3"]`
+                       usage = `"link" <node> <node> <net-name>|"-" ["l3"]`
                        err = parseConfigLink(&cfg, xs[1:])
                case "cmd":
                        usage = `"cmd" <string-passed-to-sh-c>`
                        err = parseConfigLink(&cfg, xs[1:])
                case "cmd":
                        usage = `"cmd" <string-passed-to-sh-c>`
@@ -203,17 +203,21 @@ func parseConfigLink(cfg *Config, args []string) error {
                return fmt.Errorf("node %q does not exist", args[1])
        }
 
                return fmt.Errorf("node %q does not exist", args[1])
        }
 
-       n := cfg.Nets[args[2]]
-       if n == nil {
-               return fmt.Errorf("net %q does not exist", args[2])
-       }
-       a1, err := n.Next()
-       if err != nil {
-               return err
-       }
-       a2, err := n.Next()
-       if err != nil {
-               return err
+       var a1, a2 []netip.Addr
+       if args[2] != "-" {
+               n := cfg.Nets[args[2]]
+               if n == nil {
+                       return fmt.Errorf("net %q does not exist", args[2])
+               }
+               var err error
+               a1, err = n.Next()
+               if err != nil {
+                       return err
+               }
+               a2, err = n.Next()
+               if err != nil {
+                       return err
+               }
        }
 
        var l Link
        }
 
        var l Link