On Thu, Aug 15, 2024 at 12:54:25AM +0200, Stefano Brivio wrote: > In the next patches, we'll reuse it to set flags other than IFF_UP. > > Signed-off-by: Stefano Brivio If we had more instances it might be nice to have a wrapper to just ifup, but there's only 2 callers, so, Reviewed-by: David Gibson > --- > netlink.c | 11 +++++++---- > netlink.h | 3 ++- > pasta.c | 4 ++-- > 3 files changed, 11 insertions(+), 7 deletions(-) > > diff --git a/netlink.c b/netlink.c > index e33765e..873e6c7 100644 > --- a/netlink.c > +++ b/netlink.c > @@ -968,13 +968,16 @@ int nl_link_set_mtu(int s, unsigned int ifi, int mtu) > } > > /** > - * nl_link_up() - Bring link up > + * nl_link_set_flags() - Set link flags > * @s: Netlink socket > * @ifi: Interface index > + * @set: Device flags to set > + * @change: Mask of device flag changes > * > * Return: 0 on success, negative error code on failure > */ > -int nl_link_up(int s, unsigned int ifi) > +int nl_link_set_flags(int s, unsigned int ifi, > + unsigned int set, unsigned int change) > { > struct req_t { > struct nlmsghdr nlh; > @@ -982,8 +985,8 @@ int nl_link_up(int s, unsigned int ifi) > } req = { > .ifm.ifi_family = AF_UNSPEC, > .ifm.ifi_index = ifi, > - .ifm.ifi_flags = IFF_UP, > - .ifm.ifi_change = IFF_UP, > + .ifm.ifi_flags = set, > + .ifm.ifi_change = change, > }; > > return nl_do(s, &req, RTM_NEWLINK, 0, sizeof(req)); > diff --git a/netlink.h b/netlink.h > index 87d27ae..178f8ae 100644 > --- a/netlink.h > +++ b/netlink.h > @@ -24,6 +24,7 @@ int nl_addr_dup(int s_src, unsigned int ifi_src, > int nl_link_get_mac(int s, unsigned int ifi, void *mac); > int nl_link_set_mac(int s, unsigned int ifi, const void *mac); > int nl_link_set_mtu(int s, unsigned int ifi, int mtu); > -int nl_link_up(int s, unsigned int ifi); > +int nl_link_set_flags(int s, unsigned int ifi, > + unsigned int set, unsigned int change); > > #endif /* NETLINK_H */ > diff --git a/pasta.c b/pasta.c > index 3a0652e..96545b1 100644 > --- a/pasta.c > +++ b/pasta.c > @@ -288,7 +288,7 @@ void pasta_ns_conf(struct ctx *c) > { > int rc = 0; > > - rc = nl_link_up(nl_sock_ns, 1 /* lo */); > + rc = nl_link_set_flags(nl_sock_ns, 1 /* lo */, IFF_UP, IFF_UP); > if (rc < 0) > die("Couldn't bring up loopback interface in namespace: %s", > strerror(-rc)); > @@ -306,7 +306,7 @@ void pasta_ns_conf(struct ctx *c) > if (c->mtu != -1) > nl_link_set_mtu(nl_sock_ns, c->pasta_ifi, c->mtu); > > - nl_link_up(nl_sock_ns, c->pasta_ifi); > + nl_link_set_flags(nl_sock_ns, c->pasta_ifi, IFF_UP, IFF_UP); > > if (c->ifi4) { > if (c->ip4.no_copy_addrs) { -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson