- /* construct the param and capability */
- cap_mp_ipv6.code = BGP_CAP_CODE_MP;
- cap_mp_ipv6.len = sizeof(mp_ipv6);
- memcpy(&cap_mp_ipv6.value, &mp_ipv6, cap_mp_ipv6.len);
+ /* if we know peer doesn't support MP (mp_handling == DoesntHandleIPv6Routes)
+ then don't add this parameter */
+ if (config->ipv6_prefix.s6_addr[0]
+ && (peer->mp_handling == HandlingUnknown
+ || peer->mp_handling == HandleIPv6Routes))
+ {
+ /* construct the param and capability */
+ cap_mp_ipv6.code = BGP_CAP_CODE_MP;
+ cap_mp_ipv6.len = sizeof(mp_ipv6);
+ memcpy(&cap_mp_ipv6.value, &mp_ipv6, cap_mp_ipv6.len);