X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=blobdiff_plain;f=src%2Fvnet%2Fdevices%2Fnetlink.c;h=8346b1c77ea48d42c49c1ba195a1205d924b5d89;hp=5994366007c2b3827f275f8c4be3ebf16d4bdac4;hb=7866c45;hpb=929fb9d75071ef4141b1cac3997f86d9ded0a9ab diff --git a/src/vnet/devices/netlink.c b/src/vnet/devices/netlink.c index 5994366007c..8346b1c77ea 100644 --- a/src/vnet/devices/netlink.c +++ b/src/vnet/devices/netlink.c @@ -245,6 +245,48 @@ vnet_netlink_add_ip6_addr (int ifindex, void *addr, int pfx_len) return vnet_netlink_msg_send (&m); } +clib_error_t * +vnet_netlink_add_ip4_route (void *dst, u8 dst_len, void *gw) +{ + vnet_netlink_msg_t m; + struct rtmsg rtm = { 0 }; + u8 dflt[4] = { 0 }; + + rtm.rtm_family = AF_INET; + rtm.rtm_table = RT_TABLE_MAIN; + rtm.rtm_type = RTN_UNICAST; + rtm.rtm_dst_len = dst_len; + + vnet_netlink_msg_init (&m, RTM_NEWROUTE, + NLM_F_REQUEST | NLM_F_CREATE | NLM_F_EXCL, + &rtm, sizeof (struct rtmsg)); + + vnet_netlink_msg_add_rtattr (&m, RTA_GATEWAY, gw, 4); + vnet_netlink_msg_add_rtattr (&m, RTA_DST, dst ? dst : dflt, 4); + return vnet_netlink_msg_send (&m); +} + +clib_error_t * +vnet_netlink_add_ip6_route (void *dst, u8 dst_len, void *gw) +{ + vnet_netlink_msg_t m; + struct rtmsg rtm = { 0 }; + u8 dflt[16] = { 0 }; + + rtm.rtm_family = AF_INET6; + rtm.rtm_table = RT_TABLE_MAIN; + rtm.rtm_type = RTN_UNICAST; + rtm.rtm_dst_len = dst_len; + + vnet_netlink_msg_init (&m, RTM_NEWROUTE, + NLM_F_REQUEST | NLM_F_CREATE | NLM_F_EXCL, + &rtm, sizeof (struct rtmsg)); + + vnet_netlink_msg_add_rtattr (&m, RTA_GATEWAY, gw, 16); + vnet_netlink_msg_add_rtattr (&m, RTA_DST, dst ? dst : dflt, 16); + return vnet_netlink_msg_send (&m); +} + /* * fd.io coding-style-patch-verification: ON *