On 2/6/25 3:19 PM, Felix Huettner via dev wrote: > From: Frode Nordahl <[email protected]> > > Introduce route-exchange-netlink module which implements interface > for maintaining VRFs [0] and routes through Netlink. > > There is a desire to do this without having to (re-)implement > routing protocol state machines in OVN, and to accomplish this we > make use of Netlink. > > Netlink was chosen because: > * Its ubiquitous nature with availability on any Linux system as > as well other platforms. > * Presence of a very good Netlink library implementation in our > sibling project and library, Open vSwitch. > * Popular routing protocol software conveniently already have > support for redistributing routes to/from Netlink. > * Support for interacting with Virtual Routing and Forwarding > domains [0], allowing full isolation between virtual network > resources defined within OVN and the hosting system while > retaining access to all system network interfaces. > > It is important to note that the purpose of this integration is > generic exchange of control plane information, while allowing to > keep the datapath in OVS/OVN, enabling users to leverage its full > range of user-, kernel- and mixed- space datapath implementations. > > 0: https://docs.kernel.org/networking/vrf.html > > Acked-by: Dumitru Ceara <[email protected]> > Acked-by: Frode Nordahl <[email protected]>
Nit: Frode can't be both author and reviewer of the patch. :) > Co-Authored-by: Felix Huettner <[email protected]> > Signed-off-by: Felix Huettner <[email protected]> > Signed-off-by: Frode Nordahl <[email protected]> > --- [...] > +int > +re_nl_create_vrf(const char *ifname, uint32_t table_id) > +{ > + if (!TABLE_ID_VALID(table_id)) { > + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); > + VLOG_WARN_RL(&rl, > + "attempt to create VRF using invalid table id %"PRIu32, > + table_id); > + return EINVAL; > + } > + > + size_t linkinfo_off, infodata_off; > + struct ifinfomsg *ifinfo; > + struct ofpbuf request; > + int err; > + > + ofpbuf_init(&request, 0); > + nl_msg_put_nlmsghdr(&request, 0, RTM_NEWLINK, > + NLM_F_REQUEST | NLM_F_ACK | NLM_F_CREATE | > NLM_F_EXCL); > + ifinfo = ofpbuf_put_zeros(&request, sizeof *ifinfo); > + nl_msg_put_string(&request, IFLA_IFNAME, ifname); > + > + ifinfo->ifi_change = ifinfo->ifi_flags = IFF_UP; > + linkinfo_off = nl_msg_start_nested(&request, IFLA_LINKINFO); > + nl_msg_put_string(&request, IFLA_INFO_KIND, "vrf"); > + infodata_off = nl_msg_start_nested(&request, IFLA_INFO_DATA); > + nl_msg_put_u32(&request, IFLA_VRF_TABLE, table_id); > + nl_msg_end_nested(&request, infodata_off); > + nl_msg_end_nested(&request, linkinfo_off); > + > + err = nl_transact(NETLINK_ROUTE, &request, NULL); > + > + ofpbuf_uninit(&request); > + return err; > + Nit: no need for a newline here. With this addressed my ack still stands: Acked-by: Dumitru Ceara <[email protected]> > +} > + Thanks, Dumitru _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
