From: David Gwynne Subject: Re: ifconfig: add and document vxlan "[-]endpoint" command To: Denis Fondras Cc: tech@openbsd.org Date: Mon, 6 Jan 2025 07:36:58 +1000 On Sun, Jan 05, 2025 at 01:41:21PM +0100, Denis Fondras wrote: > This diff adds a command to remove an endpoint when vxlan(4) is in endpoint > mode. > Also add some documentation for the "endpoint" command. Change is not 100% > satisfaying as the "endpoint" and "-endpoint" does not take the same number of > arguments. Any opinion ? they're analogous to cp/mv/etc taking source and target args, and rm only taking target. the only reason -endpoint would take multiple arguments is if you can point multicast/broadcast ethernet addrs at multiple tunnel endpoints, so you would need to specify which of these entries you're removing. go for it, ok by me. > > Index: brconfig.c > =================================================================== > RCS file: /cvs/src/sbin/ifconfig/brconfig.c,v > diff -u -p -r1.32 brconfig.c > --- brconfig.c 23 Nov 2023 03:38:34 -0000 1.32 > +++ brconfig.c 5 Jan 2025 12:33:53 -0000 > @@ -693,6 +693,29 @@ bridge_addendpoint(const char *endpoint, > } > > void > +bridge_delendpoint(const char *addr, int d) > +{ > + struct ifbareq ifba; > + struct ether_addr *ea; > + int ecode; > + > + ea = ether_aton(addr); > + if (ea == NULL) { > + errx(1, "%s -endpoint %s: invalid Ethernet address", > + ifname, addr); > + } > + > + memset(&ifba, 0, sizeof(ifba)); > + strlcpy(ifba.ifba_name, ifname, sizeof(ifba.ifba_name)); > + strlcpy(ifba.ifba_ifsname, ifname, sizeof(ifba.ifba_ifsname)); > + memcpy(&ifba.ifba_dst, ea, sizeof(struct ether_addr)); > + ifba.ifba_flags = IFBAF_STATIC; > + > + if (ioctl(sock, SIOCBRDGDADDR, &ifba) == -1) > + err(1, "%s -endpoint %s", ifname, addr); > +} > + > +void > bridge_addrs(const char *delim, int d) > { > char dstaddr[NI_MAXHOST]; > Index: ifconfig.8 > =================================================================== > RCS file: /cvs/src/sbin/ifconfig/ifconfig.8,v > diff -u -p -r1.400 ifconfig.8 > --- ifconfig.8 9 Jun 2024 16:25:27 -0000 1.400 > +++ ifconfig.8 5 Jan 2025 12:33:53 -0000 > @@ -1841,6 +1841,7 @@ for a complete list of the available pro > .Bk -words > .Nm ifconfig > .Ar tunnel-interface > +.Op Oo Fl Oc Ns Cm endpoint Ar dest_address dest_mac > .Op Oo Fl Oc Ns Cm keepalive Ar period count > .Op Oo Fl Oc Ns Cm parent Ar parent-interface > .Op Cm rxprio Ar prio > @@ -1867,6 +1868,20 @@ and > are all tunnel interfaces. > The following options are available: > .Bl -tag -width Ds > +.It Cm endpoint Ar dest_address dest_mac > +When > +.Xr vxlan 4 > +is in endpoint mode, set the tunnel endpoint > +.Ar dest_address > +where > +.Ar dest_mac > +MAC address can be reached. > +.It Cm -endpoint Ar dest_mac > +When > +.Xr vxlan 4 > +is in endpoint mode, remove the tunnel endpoint for > +.Ar dest_mac > +MAC address. > .It Cm keepalive Ar period count > Enable > .Xr gre 4 > Index: ifconfig.c > =================================================================== > RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v > diff -u -p -r1.474 ifconfig.c > --- ifconfig.c 29 Jun 2024 12:09:51 -0000 1.474 > +++ ifconfig.c 5 Jan 2025 12:33:53 -0000 > @@ -578,6 +578,7 @@ const struct cmd { > { "flushall", 0, 0, bridge_flushall }, > { "static", NEXTARG2, 0, NULL, bridge_addaddr }, > { "endpoint", NEXTARG2, 0, NULL, bridge_addendpoint }, > + { "-endpoint", NEXTARG, 0, bridge_delendpoint }, > { "deladdr", NEXTARG, 0, bridge_deladdr }, > { "maxaddr", NEXTARG, 0, bridge_maxaddr }, > { "addr", 0, 0, bridge_addrs }, > @@ -624,7 +625,7 @@ const struct cmd { > { "wgpeer", NEXTARG, A_WIREGUARD, setwgpeer}, > { "wgdescription", NEXTARG, A_WIREGUARD, setwgpeerdesc}, > { "wgdescr", NEXTARG, A_WIREGUARD, setwgpeerdesc}, > - { "wgendpoint", NEXTARG2, A_WIREGUARD, NULL, setwgpeerep}, > + { "wgendpoint", NEXTARG2, A_WIREGUARD, NULL, setwgpeerep}, > { "wgaip", NEXTARG, A_WIREGUARD, setwgpeeraip}, > { "wgpsk", NEXTARG, A_WIREGUARD, setwgpeerpsk}, > { "wgpka", NEXTARG, A_WIREGUARD, setwgpeerpka}, > Index: ifconfig.h > =================================================================== > RCS file: /cvs/src/sbin/ifconfig/ifconfig.h,v > diff -u -p -r1.5 ifconfig.h > --- ifconfig.h 23 Nov 2023 03:38:34 -0000 1.5 > +++ ifconfig.h 5 Jan 2025 12:33:53 -0000 > @@ -49,6 +49,7 @@ void bridge_flush(const char *, int); > void bridge_flushall(const char *, int); > void bridge_addaddr(const char *, const char *); > void bridge_addendpoint(const char *, const char *); > +void bridge_delendpoint(const char *, int); > void bridge_deladdr(const char *, int); > void bridge_maxaddr(const char *, int); > void bridge_addrs(const char *, int); >