Index | Thread | Search

From:
David Gwynne <david@gwynne.id.au>
Subject:
Re: ifconfig: add and document vxlan "[-]endpoint" command
To:
Denis Fondras <denis@openbsd.org>
Cc:
tech@openbsd.org
Date:
Mon, 6 Jan 2025 07:36:58 +1000

Download raw body.

Thread
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);
>