On Wed, Feb 21, 2018 at 03:42:58PM +0100, Sebastian Benoit wrote: > Ayaka Koshibe(akosh...@openbsd.org) on 2018.02.20 21:20:20 -0800: > > On Tue, Feb 20, 2018 at 4:48 AM, Reyk Floeter <r...@openbsd.org> wrote: > > > > > >> Am 20.02.2018 um 11:15 schrieb Klemens Nanni <k...@openbsd.org>: > > >> > > >>> On Mon, Feb 19, 2018 at 05:09:58PM -0800, Ayaka Koshibe wrote: > > >>> This diff would allow saying 'ifconfig foo -rdomain' instead of > > >>> 'ifconfig foo rdomain 0'. > > >> I can see where you're coming from but this breaks semantics: `-option' > > >> clears an optional parameter or deconfigures functionality whereas > > >> `rdomain' is mandatory (defaulting to 0), every interface is attached > > >> to exactly one routing domain all the time. > > >> > > > > > > I would rather say that -option resets it to the default non-specific > > > option. For example, -mode doesn???t remove all wireless modes. > > > > This was also my interpretation of -option -- a way to reset to the > > default, which happens to be a value of 0 for this case. > > > > > I think -rdomain is a good addition and the diff looks fine. > > > > > > Reyk > > i'm ok with the diff as well, but i want to remind you that rdomain is > special, because it also removes all ip configuration from the interface. > I.e. -rdomain does more than the other -options.
Ah, right. I hope I can just update the man page to explicitly mention this. I've also made it a bit more concise as jmc had suggested. Index: sbin/ifconfig/ifconfig.8 =================================================================== RCS file: /cvs/src/sbin/ifconfig/ifconfig.8,v retrieving revision 1.303 diff -u -p -u -p -r1.303 ifconfig.8 --- sbin/ifconfig/ifconfig.8 20 Feb 2018 07:34:28 -0000 1.303 +++ sbin/ifconfig/ifconfig.8 22 Feb 2018 06:06:00 -0000 @@ -439,6 +439,10 @@ domains. If the specified rdomain does not yet exist it will be created, including a routing table with the same id. By default all interfaces belong to routing domain 0. +.It Cm -rdomain +Remove the interface from the routing domain and return it to routing +domain 0. +Any inet and inet6 addresses on the interface will also be removed. .It Cm rtlabel Ar route-label (inet) Attach Index: sbin/ifconfig/ifconfig.c =================================================================== RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v retrieving revision 1.360 diff -u -p -u -p -r1.360 ifconfig.c --- sbin/ifconfig/ifconfig.c 20 Feb 2018 15:33:16 -0000 1.360 +++ sbin/ifconfig/ifconfig.c 22 Feb 2018 06:06:01 -0000 @@ -237,6 +237,7 @@ void unsetvlandev(const char *, int); void mpe_status(void); void mpw_status(void); void setrdomain(const char *, int); +void unsetrdomain(const char *, int); int prefix(void *val, int); void getifgroups(void); void setifgroup(const char *, int); @@ -421,6 +422,7 @@ const struct cmd { { "rtlabel", NEXTARG, 0, setifrtlabel }, { "-rtlabel", -1, 0, setifrtlabel }, { "rdomain", NEXTARG, 0, setrdomain }, + { "-rdomain", 0, 0, unsetrdomain }, { "staticarp", IFF_STATICARP, 0, setifflags }, { "-staticarp", -IFF_STATICARP, 0, setifflags }, { "mpls", IFXF_MPLS, 0, setifxflags }, @@ -5665,6 +5667,15 @@ setrdomain(const char *id, int param) strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); ifr.ifr_rdomainid = rdomainid; if (ioctl(s, SIOCSIFRDOMAIN, (caddr_t)&ifr) < 0) + warn("SIOCSIFRDOMAIN"); +} + +void +unsetrdomain(const char *ignored, int alsoignored) +{ + strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + ifr.ifr_rdomainid = 0; + if (ioctl(s, SIOCSIFRDOMAIN, (caddr_t)&ifr) < 0) warn("SIOCSIFRDOMAIN"); } #endif