On 4/24/26 3:23 PM, Ales Musil wrote:
> FDB entries using a nexthop ID instead of a direct destination
> address are not parsed. Add NDA_NH_ID support so they can be
> used by the EVPN FDBs.
> 
> Assisted-by: Claude Opus 4.6, Claude Code
> Signed-off-by: Ales Musil <[email protected]>
> ---

Hi Ales,

>  controller/neighbor-exchange-netlink.c |  13 +++
>  controller/neighbor-exchange-netlink.h |   1 +
>  tests/ovn-macros.at                    |   6 +-
>  tests/system-ovn-netlink.at            | 121 ++++++++++++++++++++-----
>  tests/test-ovn-netlink.c               |  10 +-
>  5 files changed, 121 insertions(+), 30 deletions(-)
> 
> diff --git a/controller/neighbor-exchange-netlink.c 
> b/controller/neighbor-exchange-netlink.c
> index 812c146f4..9eecf9f5b 100644
> --- a/controller/neighbor-exchange-netlink.c
> +++ b/controller/neighbor-exchange-netlink.c
> @@ -266,12 +266,18 @@ ne_table_parse__(struct ofpbuf *buf, size_t ofs, const 
> struct nlmsghdr *nlmsg,
>          [NDA_DST] = { .type = NL_A_U32, .optional = true },
>          [NDA_LLADDR] = { .type = NL_A_LL_ADDR, .optional = true },
>          [NDA_PORT] = { .type = NL_A_U16, .optional = true },
> +        /* NDA_NH_ID is only used with AF_BRIDGE messages.
> +         * This entry aligns the policy array sizes. */

Nit: this comment feels superfluous, did Claude add it? :)

> +        [NDA_NH_ID] = { .type = NL_A_U32, .optional = true },
>      };
>  
>      static const struct nl_policy policy6[] = {
>          [NDA_DST] = { .type = NL_A_IPV6, .optional = true },
>          [NDA_LLADDR] = { .type = NL_A_LL_ADDR, .optional = true },
>          [NDA_PORT] = { .type = NL_A_U16, .optional = true },
> +        /* NDA_NH_ID is only used with AF_BRIDGE messages.
> +         * This entry aligns the policy array sizes. */
> +        [NDA_NH_ID] = { .type = NL_A_U32, .optional = true },

Nit: this comment feels superfluous, did Claude add it? :)

>      };
>  
>      static const struct nl_policy policy_bridge[] = {
> @@ -281,6 +287,7 @@ ne_table_parse__(struct ofpbuf *buf, size_t ofs, const 
> struct nlmsghdr *nlmsg,
>          [NDA_LLADDR] = { .type = NL_A_LL_ADDR, .optional = true },
>          [NDA_PORT] = { .type = NL_A_U16, .optional = true },
>          [NDA_VLAN] = { .type = NL_A_U16, .optional = true },
> +        [NDA_NH_ID] = { .type = NL_A_U32, .optional = true },
>      };
>  
>      BUILD_ASSERT(ARRAY_SIZE(policy) == ARRAY_SIZE(policy6));
> @@ -345,6 +352,12 @@ ne_table_parse__(struct ofpbuf *buf, size_t ofs, const 
> struct nlmsghdr *nlmsg,
>          if (attrs[NDA_VLAN]) {
>              change->nd.vlan = nl_attr_get_u16(attrs[NDA_VLAN]);
>          }
> +
> +        /* NDA_NH_ID is only present in AF_BRIDGE messages in practice,
> +         * but reading it unconditionally is harmless. */

Same here.

> +        if (attrs[NDA_NH_ID]) {
> +            change->nd.nh_id = nl_attr_get_u32(attrs[NDA_NH_ID]);
> +        }
>      } else {
>          VLOG_DBG_RL(&rl, "received unparseable rtnetlink neigh message");
>          return 0;
> diff --git a/controller/neighbor-exchange-netlink.h 
> b/controller/neighbor-exchange-netlink.h
> index 6d907938e..659fe72d8 100644
> --- a/controller/neighbor-exchange-netlink.h
> +++ b/controller/neighbor-exchange-netlink.h
> @@ -40,6 +40,7 @@ struct ne_nl_received_neigh {
>                               * from linux/neighbour.h. */
>      uint8_t  type;          /* A value out of 'rtm_type' from 
> linux/rtnetlink.h
>                               * e.g., RTN_UNICAST, RTN_MULTICAST. */
> +    uint32_t nh_id;         /* ID of nexthop group if present, 0 otherwise. 
> */
>  };
>  
>  /* A digested version of a neigh message sent down by the kernel to indicate
> diff --git a/tests/ovn-macros.at b/tests/ovn-macros.at
> index 39f03ba62..241453df9 100644
> --- a/tests/ovn-macros.at
> +++ b/tests/ovn-macros.at
> @@ -1465,7 +1465,11 @@ ovn_strip_collector_set() {
>  }
>  
>  netlink_if_index() {
> -    ip -o link show dev $1 | awk -F: '{print $1}'
> +    local ns_prefix=
> +    if test -n "$2"; then
> +        ns_prefix="ip netns exec $2"
> +    fi
> +    $ns_prefix ip -o link show dev $1 | awk -F: '{print $1}'
>  }
>  
>  OVS_END_SHELL_HELPERS
> diff --git a/tests/system-ovn-netlink.at b/tests/system-ovn-netlink.at
> index 738800ea7..6bcad017f 100644
> --- a/tests/system-ovn-netlink.at
> +++ b/tests/system-ovn-netlink.at
> @@ -24,9 +24,9 @@ check bridge fdb append 00:00:00:00:00:00 dev vxlan-test \
>  if_index=$(netlink_if_index vxlan-test)
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovstest test-ovn-netlink neighbor-sync \
>      bridge $if_index 0 | sort], [0], [dnl
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:00 dst=42.42.42.3 port=0
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:00 dst=42.42.42.4 
> port=4790
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:02 dst=:: port=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:00 dst=42.42.42.3 
> port=0 nh_id=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:00 dst=42.42.42.4 
> port=4790 nh_id=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:02 dst=:: port=0 nh_id=0
>  ])
>  AT_CLEANUP
>  
> @@ -52,8 +52,44 @@ check bridge fdb add 00:00:00:00:00:03 dev vxlan-test \
>  if_index=$(netlink_if_index vxlan-test)
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovstest test-ovn-netlink neighbor-sync \
>      bridge $if_index 0 | sort], [0], [dnl
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:02 dst=:: port=0
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:03 dst=42.42.42.3 port=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:02 dst=:: port=0 nh_id=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:03 dst=42.42.42.3 
> port=0 nh_id=0
> +])
> +
> +dnl Test FDB entries with nexthop group ID (NDA_NH_ID).
> +dnl Use a separate namespace to avoid nexthop ID conflicts.
> +ADD_NAMESPACES(nhid)
> +
> +dnl Bridge setup.
> +NS_EXEC([nhid], [ip link add br-nhid type bridge])
> +NS_EXEC([nhid], [ip link set br-nhid address 00:00:00:00:00:01])
> +NS_EXEC([nhid], [ip link set dev br-nhid up])
> +
> +dnl VXLAN setup.
> +NS_EXEC([nhid], [ip link add vxlan-nhid type vxlan id 42 \
> +    dstport 4789 local 42.42.42.2 nolearning])
> +NS_EXEC([nhid], [ip link set vxlan-nhid master br-nhid])
> +NS_EXEC([nhid], [ip link set vxlan-nhid address 00:00:00:00:00:02])
> +NS_EXEC([nhid], [ip link set dev vxlan-nhid up])
> +
> +dnl Nexthop setup.
> +NS_EXEC([nhid], [ip nexthop add id 1 via 192.168.1.1 fdb])
> +NS_EXEC([nhid], [ip nexthop add id 10 group 1 fdb])
> +
> +dnl FDB entries.
> +NS_EXEC([nhid], [bridge fdb add 00:00:00:00:00:03 dev vxlan-nhid \
> +    dst 42.42.42.3 static extern_learn])
> +NS_EXEC([nhid], [bridge fdb add 00:00:00:00:00:04 dev vxlan-nhid nhid 10])
> +
> +nhid_if_index=$(netlink_if_index vxlan-nhid nhid)
> +
> +dnl Verify that nh_id is parsed and reported.
> +OVS_WAIT_FOR_OUTPUT_UNQUOTED(
> +    [ip netns exec nhid ovstest test-ovn-netlink neighbor-sync \
> +        bridge $nhid_if_index 0 | sort], [0], [dnl
> +Neighbor ifindex=$nhid_if_index vlan=0 eth=00:00:00:00:00:02 dst=:: port=0 
> nh_id=0
> +Neighbor ifindex=$nhid_if_index vlan=0 eth=00:00:00:00:00:03 dst=42.42.42.3 
> port=0 nh_id=0
> +Neighbor ifindex=$nhid_if_index vlan=0 eth=00:00:00:00:00:04 dst=:: port=0 
> nh_id=10
>  ])
>  AT_CLEANUP
>  
> @@ -76,9 +112,9 @@ dnl the L2 multicast ones.
>  if_index=$(netlink_if_index lo-test)
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovstest test-ovn-netlink neighbor-sync \
>      bridge $if_index 2 00:00:00:00:01:00 00:00:00:00:02:00 | sort], [0], [dnl
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:02 dst=:: port=0
> -Neighbor ifindex=$if_index vlan=0 eth=01:00:5e:00:00:01 dst=:: port=0
> -Neighbor ifindex=$if_index vlan=0 eth=33:33:00:00:00:01 dst=:: port=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:02 dst=:: port=0 nh_id=0
> +Neighbor ifindex=$if_index vlan=0 eth=01:00:5e:00:00:01 dst=:: port=0 nh_id=0
> +Neighbor ifindex=$if_index vlan=0 eth=33:33:00:00:00:01 dst=:: port=0 nh_id=0
>  ])
>  
>  dnl Check that OVN installed its entries (these are always installed
> @@ -98,9 +134,9 @@ check bridge fdb del 00:00:00:00:02:00 dev lo-test master 
> static
>  
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovstest test-ovn-netlink neighbor-sync \
>      bridge $if_index 2 00:00:00:00:01:00 00:00:00:00:02:00 | sort], [0], [dnl
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:02 dst=:: port=0
> -Neighbor ifindex=$if_index vlan=0 eth=01:00:5e:00:00:01 dst=:: port=0
> -Neighbor ifindex=$if_index vlan=0 eth=33:33:00:00:00:01 dst=:: port=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:02 dst=:: port=0 nh_id=0
> +Neighbor ifindex=$if_index vlan=0 eth=01:00:5e:00:00:01 dst=:: port=0 nh_id=0
> +Neighbor ifindex=$if_index vlan=0 eth=33:33:00:00:00:01 dst=:: port=0 nh_id=0
>  ])
>  
>  OVS_WAIT_FOR_OUTPUT([bridge fdb show dev lo-test | grep static | sort], [0],
> @@ -118,9 +154,9 @@ check bridge fdb add 00:00:00:00:04:00 dev lo-test master 
> static
>  
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovstest test-ovn-netlink neighbor-sync \
>      bridge $if_index 2 00:00:00:00:01:00 00:00:00:00:02:00 | sort], [0], [dnl
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:02 dst=:: port=0
> -Neighbor ifindex=$if_index vlan=0 eth=01:00:5e:00:00:01 dst=:: port=0
> -Neighbor ifindex=$if_index vlan=0 eth=33:33:00:00:00:01 dst=:: port=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:00:02 dst=:: port=0 nh_id=0
> +Neighbor ifindex=$if_index vlan=0 eth=01:00:5e:00:00:01 dst=:: port=0 nh_id=0
> +Neighbor ifindex=$if_index vlan=0 eth=33:33:00:00:00:01 dst=:: port=0 nh_id=0
>  ])
>  
>  OVS_WAIT_FOR_OUTPUT([bridge fdb show dev lo-test | grep static | sort], [0],
> @@ -160,7 +196,7 @@ dnl external ones.
>  if_index=$(netlink_if_index br-test)
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovstest test-ovn-netlink neighbor-sync \
>      inet $if_index 1 00:00:00:00:20:00 20.20.20.20 | sort], [0], [dnl
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10.10.10.10 
> port=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10.10.10.10 
> port=0 nh_id=0
>  ])
>  
>  dnl Check that OVN installed its entries (these are always installed
> @@ -172,7 +208,7 @@ dnl Let OVN inject some IPv6 neighbors too and make sure 
> it learnt the
>  dnl external ones.
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovstest test-ovn-netlink neighbor-sync \
>      inet6 $if_index 1 00:00:00:00:20:00 20::20 | sort], [0], [dnl
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10::10 port=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10::10 port=0 
> nh_id=0
>  ])
>  
>  dnl Check that OVN installed its entries (these are always installed
> @@ -186,11 +222,11 @@ check ip neigh del dev br-test 20.20.20.20
>  check ip -6 neigh del dev br-test 20::20
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovstest test-ovn-netlink neighbor-sync \
>      inet $if_index 1 00:00:00:00:20:00 20.20.20.20 | sort], [0], [dnl
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10.10.10.10 
> port=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10.10.10.10 
> port=0 nh_id=0
>  ])
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovstest test-ovn-netlink neighbor-sync \
>      inet6 $if_index 1 00:00:00:00:20:00 20::20 | sort], [0], [dnl
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10::10 port=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10::10 port=0 
> nh_id=0
>  ])
>  
>  OVN_NEIGH_EQUAL([br-test], [nud noarp], [20.20.20], [dnl
> @@ -207,11 +243,11 @@ check ip -6 neigh add 20::40 \
>  
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovstest test-ovn-netlink neighbor-sync \
>      inet $if_index 1 00:00:00:00:20:00 20.20.20.20 | sort], [0], [dnl
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10.10.10.10 
> port=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10.10.10.10 
> port=0 nh_id=0
>  ])
>  OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovstest test-ovn-netlink neighbor-sync \
>      inet6 $if_index 1 00:00:00:00:20:00 20::20 | sort], [0], [dnl
> -Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10::10 port=0
> +Neighbor ifindex=$if_index vlan=0 eth=00:00:00:00:10:00 dst=10::10 port=0 
> nh_id=0
>  ])
>  
>  OVN_NEIGH_EQUAL([br-test], [nud noarp], [20.20.20], [dnl
> @@ -241,13 +277,13 @@ lo_if_index=$(netlink_if_index lo-test)
>  dnl Should notify if an entry is added to a bridge port monitored by OVN.
>  AT_CHECK_UNQUOTED([ovstest test-ovn-netlink neighbor-table-notify \
>      'bridge fdb add 00:00:00:00:00:05 dev lo-test'], [0], [dnl
> -Add neighbor ifindex=$lo_if_index vlan=0 eth=00:00:00:00:00:05 dst=:: port=0
> +Add neighbor ifindex=$lo_if_index vlan=0 eth=00:00:00:00:00:05 dst=:: port=0 
> nh_id=0
>  ])
>  
>  dnl Should notify if an entry is removed from a bridge port monitored by OVN.
>  AT_CHECK_UNQUOTED([ovstest test-ovn-netlink neighbor-table-notify \
>      'bridge fdb del 00:00:00:00:00:05 dev lo-test'], [0], [dnl
> -Delete neighbor ifindex=$lo_if_index vlan=0 eth=00:00:00:00:00:05 dst=:: 
> port=0
> +Delete neighbor ifindex=$lo_if_index vlan=0 eth=00:00:00:00:00:05 dst=:: 
> port=0 nh_id=0
>  ])
>  
>  dnl Should NOT notify if a static entry is added to a bridge port
> @@ -261,7 +297,7 @@ dnl OVN.
>  AT_CHECK_UNQUOTED([ovstest test-ovn-netlink neighbor-table-notify \
>      'ip neigh add 10.10.10.10 lladdr 00:00:00:00:10:00 \
>          dev br-test extern_learn'], [0], [dnl
> -Add neighbor ifindex=$br_if_index vlan=0 eth=00:00:00:00:10:00 
> dst=10.10.10.10 port=0
> +Add neighbor ifindex=$br_if_index vlan=0 eth=00:00:00:00:10:00 
> dst=10.10.10.10 port=0 nh_id=0
>  ])
>  
>  dnl Should notify if an entry is removed from a bridge that's monitored by
> @@ -269,8 +305,8 @@ dnl OVN.
>  AT_CHECK_UNQUOTED([ovstest test-ovn-netlink neighbor-table-notify \
>      'ip neigh del 10.10.10.10 lladdr 00:00:00:00:10:00 \
>          dev br-test' | sort], [0], [dnl
> -Add neighbor ifindex=$br_if_index vlan=0 eth=00:00:00:00:00:00 
> dst=10.10.10.10 port=0
> -Delete neighbor ifindex=$br_if_index vlan=0 eth=00:00:00:00:00:00 
> dst=10.10.10.10 port=0
> +Add neighbor ifindex=$br_if_index vlan=0 eth=00:00:00:00:00:00 
> dst=10.10.10.10 port=0 nh_id=0
> +Delete neighbor ifindex=$br_if_index vlan=0 eth=00:00:00:00:00:00 
> dst=10.10.10.10 port=0 nh_id=0
>  ])
>  
>  dnl Should NOT notify if a noarp entry is added to a bridge port
> @@ -279,6 +315,41 @@ AT_CHECK_UNQUOTED([ovstest test-ovn-netlink 
> neighbor-table-notify \
>      'ip neigh add 20.20.20.20 lladdr 00:00:00:00:20:00 \
>          dev br-test nud noarp'], [0], [dnl
>  ])
> +
> +dnl Test NDA_NH_ID in notifications.
> +dnl Use a separate namespace to avoid nexthop ID conflicts.
> +ADD_NAMESPACES(nhid)
> +
> +dnl Bridge setup.
> +NS_EXEC([nhid], [ip link add br-nhid type bridge])
> +NS_EXEC([nhid], [ip link set br-nhid address 00:00:00:00:00:01])
> +NS_EXEC([nhid], [ip link set dev br-nhid up])
> +
> +dnl VXLAN setup.
> +NS_EXEC([nhid], [ip link add vxlan-nhid type vxlan id 42 \
> +    dstport 4789 local 42.42.42.2 nolearning])
> +NS_EXEC([nhid], [ip link set vxlan-nhid master br-nhid])
> +NS_EXEC([nhid], [ip link set dev vxlan-nhid up])
> +
> +dnl Nexthop setup.
> +NS_EXEC([nhid], [ip nexthop add id 1 via 192.168.1.1 fdb])
> +NS_EXEC([nhid], [ip nexthop add id 10 group 1 fdb])
> +
> +nhid_if_index=$(netlink_if_index vxlan-nhid nhid)
> +
> +dnl Should notify with nh_id when FDB entry with nhid is added.
> +AT_CHECK_UNQUOTED(
> +    [ip netns exec nhid ovstest test-ovn-netlink neighbor-table-notify \
> +        'bridge fdb add 00:00:00:00:00:07 dev vxlan-nhid nhid 10'], [0], [dnl
> +Add neighbor ifindex=$nhid_if_index vlan=0 eth=00:00:00:00:00:07 dst=:: 
> port=0 nh_id=10

On slightly older kernels (I was testing with an old
6.11.6-200.fc40.x86_64) we get an additional nh_id=0 notification
here:

+Add neighbor ifindex=5 vlan=0 eth=00:00:00:00:00:07 dst=:: port=0 nh_id=0

It's not a huge deal because we only care about the notification.
I'd adapt the test to exclude nh_id=0:

diff --git a/tests/system-ovn-netlink.at b/tests/system-ovn-netlink.at
index 6bcad017fb..626ec16ac8 100644
--- a/tests/system-ovn-netlink.at
+++ b/tests/system-ovn-netlink.at
@@ -340,14 +340,16 @@ nhid_if_index=$(netlink_if_index vxlan-nhid nhid)
 dnl Should notify with nh_id when FDB entry with nhid is added.
 AT_CHECK_UNQUOTED(
     [ip netns exec nhid ovstest test-ovn-netlink neighbor-table-notify \
-        'bridge fdb add 00:00:00:00:00:07 dev vxlan-nhid nhid 10'], [0], [dnl
+        'bridge fdb add 00:00:00:00:00:07 dev vxlan-nhid nhid 10' \
+        | grep -v 'nh_id=0'], [0], [dnl
 Add neighbor ifindex=$nhid_if_index vlan=0 eth=00:00:00:00:00:07 dst=:: port=0 
nh_id=10
 ])
 
 dnl Should notify with nh_id when FDB entry with nhid is deleted.
 AT_CHECK_UNQUOTED(
     [ip netns exec nhid ovstest test-ovn-netlink neighbor-table-notify \
-        'bridge fdb del 00:00:00:00:00:07 dev vxlan-nhid nhid 10'], [0], [dnl
+        'bridge fdb del 00:00:00:00:00:07 dev vxlan-nhid nhid 10' \
+        | grep -v 'nh_id=0'], [0], [dnl
 Delete neighbor ifindex=$nhid_if_index vlan=0 eth=00:00:00:00:00:07 dst=:: 
port=0 nh_id=10
 ])
 AT_CLEANUP

> +])
> +
> +dnl Should notify with nh_id when FDB entry with nhid is deleted.
> +AT_CHECK_UNQUOTED(
> +    [ip netns exec nhid ovstest test-ovn-netlink neighbor-table-notify \
> +        'bridge fdb del 00:00:00:00:00:07 dev vxlan-nhid nhid 10'], [0], [dnl
> +Delete neighbor ifindex=$nhid_if_index vlan=0 eth=00:00:00:00:00:07 dst=:: 
> port=0 nh_id=10
> +])
>  AT_CLEANUP
>  
>  AT_SETUP([netlink - host-if-monitor])
> diff --git a/tests/test-ovn-netlink.c b/tests/test-ovn-netlink.c
> index 45880e3b4..bea269b5e 100644
> --- a/tests/test-ovn-netlink.c
> +++ b/tests/test-ovn-netlink.c
> @@ -95,10 +95,11 @@ test_neighbor_sync(struct ovs_cmdl_context *ctx)
>      VECTOR_FOR_EACH_PTR (&received_neighbors, ne) {
>          char addr_s[INET6_ADDRSTRLEN + 1];
>          printf("Neighbor ifindex=%"PRId32" vlan=%"PRIu16" "
> -               "eth=" ETH_ADDR_FMT " dst=%s port=%"PRIu16"\n",
> +               "eth=" ETH_ADDR_FMT " dst=%s port=%"PRIu16" "
> +               "nh_id=%"PRIu32"\n",
>                 ne->if_index, ne->vlan, ETH_ADDR_ARGS(ne->lladdr),
>                 ipv6_string_mapped(addr_s, &ne->addr) ? addr_s : "(invalid)",
> -               ne->port);
> +               ne->port, ne->nh_id);
>      }
>  
>  done:
> @@ -142,13 +143,14 @@ test_neighbor_table_notify(struct ovs_cmdl_context *ctx)
>      VECTOR_FOR_EACH_PTR (msgs, msg) {
>          char addr_s[INET6_ADDRSTRLEN + 1];
>          printf("%s neighbor ifindex=%"PRId32" vlan=%"PRIu16" "
> -               "eth=" ETH_ADDR_FMT " dst=%s port=%"PRIu16"\n",
> +               "eth=" ETH_ADDR_FMT " dst=%s port=%"PRIu16" "
> +               "nh_id=%"PRIu32"\n",
>                 msg->nlmsg_type == RTM_NEWNEIGH ? "Add" : "Delete",
>                 msg->nd.if_index, msg->nd.vlan, ETH_ADDR_ARGS(msg->nd.lladdr),
>                 ipv6_string_mapped(addr_s, &msg->nd.addr)
>                     ? addr_s
>                     : "(invalid)",
> -               msg->nd.port);
> +               msg->nd.port, msg->nd.nh_id);
>      }
>  
>      ovn_netlink_notifiers_destroy();

I took care of the nits above and applied the patch to main.

Regards,
Dumitru

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to