]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_mplsvpn.c
bgpd: Replace bgp_flag_* to [UN]SET/CHECK_FLAG macros
[mirror_frr.git] / bgpd / bgp_mplsvpn.c
index 1156810510d3c744ba416bd3702032b22412df6a..86c04b71f07429b0eea345a2a913525fa8ab3ebf 100644 (file)
@@ -109,7 +109,7 @@ int bgp_nlri_parse_vpn(struct peer *peer, struct attr *attr,
        uint16_t type;
        struct rd_as rd_as;
        struct rd_ip rd_ip;
-       struct prefix_rd prd;
+       struct prefix_rd prd = {0};
        mpls_label_t label = {0};
        afi_t afi;
        safi_t safi;
@@ -142,7 +142,8 @@ int bgp_nlri_parse_vpn(struct peer *peer, struct attr *attr,
                        if (pnt + BGP_ADDPATH_ID_LEN > lim)
                                return BGP_NLRI_PARSE_ERROR_PACKET_OVERFLOW;
 
-                       addpath_id = ntohl(*((uint32_t *)pnt));
+                       memcpy(&addpath_id, pnt, BGP_ADDPATH_ID_LEN);
+                       addpath_id = ntohl(addpath_id);
                        pnt += BGP_ADDPATH_ID_LEN;
                }
 
@@ -699,7 +700,8 @@ void vpn_leak_from_vrf_update(struct bgp *bgp_vpn,      /* to */
                return;
        }
 
-       bgp_attr_dup(&static_attr, path_vrf->attr); /* shallow copy */
+       /* shallow copy */
+       static_attr = *path_vrf->attr;
 
        /*
         * route map handling
@@ -781,12 +783,12 @@ void vpn_leak_from_vrf_update(struct bgp *bgp_vpn,            /* to */
                        static_attr.nexthop.s_addr = nexthop->u.prefix4.s_addr;
 
                        static_attr.mp_nexthop_global_in = nexthop->u.prefix4;
-                       static_attr.mp_nexthop_len = 4;
+                       static_attr.mp_nexthop_len = BGP_ATTR_NHLEN_IPV4;
                        break;
 
                case AF_INET6:
                        static_attr.mp_nexthop_global = nexthop->u.prefix6;
-                       static_attr.mp_nexthop_len = 16;
+                       static_attr.mp_nexthop_len = BGP_ATTR_NHLEN_IPV6_GLOBAL;
                        break;
 
                default:
@@ -802,7 +804,8 @@ void vpn_leak_from_vrf_update(struct bgp *bgp_vpn,      /* to */
                                 */
                                static_attr.mp_nexthop_global_in =
                                        static_attr.nexthop;
-                               static_attr.mp_nexthop_len = 4;
+                               static_attr.mp_nexthop_len =
+                                       BGP_ATTR_NHLEN_IPV4;
                                /*
                                 * XXX Leave static_attr.nexthop
                                 * intact for NHT
@@ -821,7 +824,8 @@ void vpn_leak_from_vrf_update(struct bgp *bgp_vpn,      /* to */
                            && !BGP_ATTR_NEXTHOP_AFI_IP6(path_vrf->attr)) {
                                static_attr.mp_nexthop_global_in.s_addr =
                                        static_attr.nexthop.s_addr;
-                               static_attr.mp_nexthop_len = 4;
+                               static_attr.mp_nexthop_len =
+                                       BGP_ATTR_NHLEN_IPV4;
                                static_attr.flag |=
                                        ATTR_FLAG_BIT(BGP_ATTR_NEXT_HOP);
                        }
@@ -1080,7 +1084,8 @@ vpn_leak_to_vrf_update_onevrf(struct bgp *bgp_vrf,            /* to */
                                buf_prefix, bgp_vrf->name_pretty);
        }
 
-       bgp_attr_dup(&static_attr, path_vpn->attr); /* shallow copy */
+       /* shallow copy */
+       static_attr = *path_vpn->attr;
 
        /*
         * Nexthop: stash and clear