From ded50996be6d26cefa9053c0b4d34207584eecaa Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Wed, 30 Apr 2025 10:14:40 +0200 Subject: [PATCH] config: "link": make net-name optional for unnumbered ptp-links Helped-by: Luca --- README.adoc | 13 +++++++------ config.go | 28 ++++++++++++++++------------ 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/README.adoc b/README.adoc index 1ec8238..a3bc458 100644 --- a/README.adoc +++ b/README.adoc @@ -141,14 +141,15 @@ new interface "lo2". === Option "link" - "link" ["l3"] + "link" |"-" ["l3"] "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" diff --git a/config.go b/config.go index 2773b8d..11963e6 100644 --- a/config.go +++ b/config.go @@ -93,7 +93,7 @@ func LoadConfig(path string) (*Config, error) { usage = `"node" [...]` err = parseConfigNode(&cfg, xs[1:]) case "link": - usage = `"link" ["l3"]` + usage = `"link" |"-" ["l3"]` err = parseConfigLink(&cfg, xs[1:]) case "cmd": usage = `"cmd" ` @@ -203,17 +203,21 @@ func parseConfigLink(cfg *Config, args []string) error { 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 -- 2.49.0