]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Allow IFLA_IFALIAS to set ifp->desc 1381/head
authorDonald Sharp <sharpd@cumulusnetworks.com>
Sat, 28 Oct 2017 01:24:13 +0000 (21:24 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Sat, 28 Oct 2017 10:58:18 +0000 (06:58 -0400)
The linux kernel passes the IFLA_IFALIAS value.  Allow
zebra to read and set the description appropriately.

Currently I don't set the value down into the kernel.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
zebra/if_netlink.c

index cf8bdf5a8e83624c2a900cfbe73b1d173d285ff2..39f005e55a60b16fbe8bc09a964d0ae9744dfabf 100644 (file)
@@ -548,6 +548,7 @@ static int netlink_interface(struct sockaddr_nl *snl, struct nlmsghdr *h,
        struct interface *ifp;
        char *name = NULL;
        char *kind = NULL;
+       char *desc = NULL;
        char *slave_kind = NULL;
        struct zebra_ns *zns;
        vrf_id_t vrf_id = VRF_DEFAULT;
@@ -589,6 +590,9 @@ static int netlink_interface(struct sockaddr_nl *snl, struct nlmsghdr *h,
                return -1;
        name = (char *)RTA_DATA(tb[IFLA_IFNAME]);
 
+       if (tb[IFLA_IFALIAS])
+               desc = (char *)RTA_DATA(tb[IFLA_IFALIAS]);
+
        if (tb[IFLA_LINKINFO]) {
                parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb[IFLA_LINKINFO]);
 
@@ -636,6 +640,9 @@ static int netlink_interface(struct sockaddr_nl *snl, struct nlmsghdr *h,
        ifp->speed = get_iflink_speed(name);
        ifp->ptm_status = ZEBRA_PTM_STATUS_UNKNOWN;
 
+       if (desc)
+               ifp->desc = XSTRDUP(MTYPE_TMP, desc);
+
        /* Set zebra interface type */
        zebra_if_set_ziftype(ifp, zif_type, zif_slave_type);
 
@@ -980,6 +987,7 @@ int netlink_link_change(struct sockaddr_nl *snl, struct nlmsghdr *h,
        struct interface *ifp;
        char *name = NULL;
        char *kind = NULL;
+       char *desc = NULL;
        char *slave_kind = NULL;
        struct zebra_ns *zns;
        vrf_id_t vrf_id = VRF_DEFAULT;
@@ -1044,6 +1052,10 @@ int netlink_link_change(struct sockaddr_nl *snl, struct nlmsghdr *h,
        if (tb[IFLA_LINK])
                link_ifindex = *(ifindex_t *)RTA_DATA(tb[IFLA_LINK]);
 
+       if (tb[IFLA_IFALIAS]) {
+               desc = (char *)RTA_DATA(tb[IFLA_IFALIAS]);
+       }
+
        /* If VRF, create or update the VRF structure itself. */
        if (zif_type == ZEBRA_IF_VRF) {
                netlink_vrf_change(h, tb[IFLA_LINKINFO], name);
@@ -1053,6 +1065,13 @@ int netlink_link_change(struct sockaddr_nl *snl, struct nlmsghdr *h,
        /* See if interface is present. */
        ifp = if_lookup_by_name_per_ns(zns, name);
 
+       if (ifp) {
+               if (ifp->desc)
+                       XFREE(MTYPE_TMP, ifp->desc);
+               if (desc)
+                       ifp->desc = XSTRDUP(MTYPE_TMP, desc);
+       }
+
        if (h->nlmsg_type == RTM_NEWLINK) {
                if (tb[IFLA_MASTER]) {
                        if (slave_kind && (strcmp(slave_kind, "vrf") == 0)) {