diff options
| author | Sri Mohana Singamsetty <srimohans@gmail.com> | 2019-05-17 11:39:27 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-17 11:39:27 -0700 |
| commit | 7cfaf4b3394de78bc1a48b22d84f118a80f88b98 (patch) | |
| tree | 87ddfdf3ed07c95ca01c470b49dfaa46b26ea2ce /zebra/if_netlink.c | |
| parent | 02f4c3ab5b33f5f17b592ef7787797a0e43d0785 (diff) | |
| parent | 53ca01e52c487954f68ab7a76f163cf465fb9209 (diff) | |
Merge pull request #4168 from qlyoung/vrrp
VRRP
Diffstat (limited to 'zebra/if_netlink.c')
| -rw-r--r-- | zebra/if_netlink.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c index ce0834f190..df8d4bfe15 100644 --- a/zebra/if_netlink.c +++ b/zebra/if_netlink.c @@ -1396,6 +1396,32 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) return 0; } +int netlink_protodown(struct interface *ifp, bool down) +{ + struct zebra_ns *zns = zebra_ns_lookup(NS_DEFAULT); + + struct { + struct nlmsghdr n; + struct ifinfomsg ifa; + char buf[NL_PKT_BUF_SIZE]; + } req; + + memset(&req, 0, sizeof(req)); + + req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)); + req.n.nlmsg_flags = NLM_F_REQUEST; + req.n.nlmsg_type = RTM_SETLINK; + req.n.nlmsg_pid = zns->netlink_cmd.snl.nl_pid; + + req.ifa.ifi_index = ifp->ifindex; + + addattr_l(&req.n, sizeof(req), IFLA_PROTO_DOWN, &down, 4); + addattr_l(&req.n, sizeof(req), IFLA_LINK, &ifp->ifindex, 4); + + return netlink_talk(netlink_talk_filter, &req.n, &zns->netlink_cmd, zns, + 0); +} + /* Interface information read by netlink. */ void interface_list(struct zebra_ns *zns) { |
