On 03/02/2025 15:20, Eelco Chaudron wrote:
> 
> 
> On 3 Feb 2025, at 14:33, Roi Dayan wrote:
> 
>> On 31/01/2025 12:25, Eelco Chaudron wrote:
>>>
>>>
>>> On 20 Jan 2025, at 11:12, Roi Dayan via dev wrote:
>>>
>>>> From: Eli Britstein <[email protected]>
>>>>
>>>> The tnl/neigh table was used only for the bridge, even if the tunnel's
>>>> underlay port is not the bridge's one (internal port for example).
>>>> Set it to use the correct port.
>>>>
>>>> Signed-off-by: Eli Britstein <[email protected]>
>>>> Acked-by: Roi Dayan <[email protected]>
>>>
>>> Hi Eli,
>>>
>>> Can you give a better explanation/exmaple why we need this change? I assume 
>>> we need a test case for this anyway.
>>>
>>> Quickly looking at the code, it assumes that the bridge’s internal port 
>>> (which has the same name as the bridge), which has the IP address, is used.
>>>
>>> Cheers,
>>>
>>> Eelco
>>
>>
>> Hi Eelco,
>>
>> Eli is on vacation I'll try to answer here.
>> The case could be when the user set ip not on the bridge netdev which has 
>> the bridge name but a different port. e.g. ip is set on a new internal port 
>> with vlan on it.
> 
> I think this is not what is supported. Looking at the code and all the data 
> structures, it all references the bridge and not any port on a bridge.
> 
> Maybe other people have more history on this?
> 

Hi Eelco, I don't have history on this either. I agree some of the data
structs/tracing and ovs_router_insert() etc are still using 'bridge'.
Also, the set commands (below) are looking for BRIDGE and using that in
tnl_neigh_set().

If there is additional information really needed, perhaps it could be
added and shown with a '-v' option like the tnl/ports/show ? That would
avoid changing existing user commands/output.

# ovs-appctl list-commands | grep tnl
  tnl/arp/aging           [SECS]
  tnl/arp/flush
  tnl/arp/set             BRIDGE IP MAC
  tnl/arp/show
  tnl/egress_port_range   min max
  tnl/neigh/aging         [SECS]
  tnl/neigh/flush
  tnl/neigh/set           BRIDGE IP MAC
  tnl/neigh/show
  tnl/ports/show          -v

>> Then it's more correct to show the interface name rather than the bridge 
>> name for better visibility.
>> There is no need for a new test case. the existing test is updated to check 
>> the output is the port name and not bridge name.
>>
>> Thanks,
>> Roi
>>
>>>
>>>> ---
>>>>  lib/tnl-neigh-cache.c        |  4 ++--
>>>>  ofproto/ofproto-dpif-xlate.c | 11 ++++++-----
>>>>  tests/tunnel-push-pop.at     |  2 +-
>>>>  3 files changed, 9 insertions(+), 8 deletions(-)
>>>>
>>>> diff --git a/lib/tnl-neigh-cache.c b/lib/tnl-neigh-cache.c
>>>> index bdff1debc805..7e2eaa8262bf 100644
>>>> --- a/lib/tnl-neigh-cache.c
>>>> +++ b/lib/tnl-neigh-cache.c
>>>> @@ -375,8 +375,8 @@ tnl_neigh_cache_show(struct unixctl_conn *conn, int 
>>>> argc OVS_UNUSED,
>>>>      struct ds ds = DS_EMPTY_INITIALIZER;
>>>>      struct tnl_neigh_entry *neigh;
>>>>
>>>> -    ds_put_cstr(&ds, "IP                                            MAC   
>>>>               Bridge\n");
>>>> -    ds_put_cstr(&ds, 
>>>> "==========================================================================\n");
>>>> +    ds_put_cstr(&ds, "IP                                            MAC   
>>>>               Port\n");
>>>> +    ds_put_cstr(&ds, 
>>>> "========================================================================\n");
>>>>      ovs_mutex_lock(&mutex);
>>>>      CMAP_FOR_EACH(neigh, cmap_node, &table) {
>>>>          int start_len, need_ws;
>>>> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
>>>> index 4cc7001a5b25..d13547b4a7f9 100644
>>>> --- a/ofproto/ofproto-dpif-xlate.c
>>>> +++ b/ofproto/ofproto-dpif-xlate.c
>>>> @@ -3916,17 +3916,18 @@ native_tunnel_output(struct xlate_ctx *ctx, const 
>>>> struct xport *xport,
>>>>          s_ip = in6_addr_get_mapped_ipv4(&s_ip6);
>>>>      }
>>>>
>>>> -    err = tnl_neigh_lookup(out_dev->xbridge->name, &d_ip6, &dmac);
>>>> +    err = tnl_neigh_lookup(netdev_get_name(out_dev->netdev), &d_ip6, 
>>>> &dmac);
>>>>      if (err) {
>>>>          struct in6_addr nh_s_ip6 = in6addr_any;
>>>>
>>>>          xlate_report(ctx, OFT_DETAIL,
>>>>                       "neighbor cache miss for %s on bridge %s, "
>>>>                       "sending %s request",
>>>> -                     buf_dip6, out_dev->xbridge->name, d_ip ? "ARP" : 
>>>> "ND");
>>>> +                     buf_dip6, netdev_get_name(out_dev->netdev),
>>>> +                     d_ip ? "ARP" : "ND");
>>>>
>>>>          err = ovs_router_get_netdev_source_address(&d_ip6,
>>>> -                                                   out_dev->xbridge->name,
>>>> +                                                   
>>>> netdev_get_name(out_dev->netdev),
>>>>                                                     &nh_s_ip6);
>>>>          if (err) {
>>>>              nh_s_ip6 = s_ip6;
>>>> @@ -4414,7 +4415,7 @@ terminate_native_tunnel(struct xlate_ctx *ctx, const 
>>>> struct xport *xport,
>>>>           * do tunnel neighbor snooping. */
>>>>          if (*tnl_port == ODPP_NONE &&
>>>>              (check_neighbor_reply(ctx, flow) || is_garp(flow, wc))) {
>>>> -            tnl_neigh_snoop(flow, wc, ctx->xbridge->name,
>>>> +            tnl_neigh_snoop(flow, wc, netdev_get_name(xport->netdev),
>>>>                              ctx->xin->allow_side_effects);
>>>>          } else if (*tnl_port != ODPP_NONE &&
>>>>                     ctx->xin->allow_side_effects &&
>>>> @@ -4428,7 +4429,7 @@ terminate_native_tunnel(struct xlate_ctx *ctx, const 
>>>> struct xport *xport,
>>>>                  s_ip6 = flow->ipv6_src;
>>>>              }
>>>>
>>>> -            tnl_neigh_set(ctx->xbridge->name, &s_ip6, mac);
>>>> +            tnl_neigh_set(netdev_get_name(xport->netdev), &s_ip6, mac);
>>>>          }
>>>>      }
>>>>
>>>> diff --git a/tests/tunnel-push-pop.at b/tests/tunnel-push-pop.at
>>>> index cf4e622014b2..b6635d09afbd 100644
>>>> --- a/tests/tunnel-push-pop.at
>>>> +++ b/tests/tunnel-push-pop.at
>>>> @@ -1153,7 +1153,7 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p0 
>>>> 'recirc_id(0),in_port(1),dnl
>>>>    
>>>> arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=aa:55:aa:55:00:03)'])
>>>>
>>>>  AT_CHECK([ovs-appctl tnl/neigh/show | tail -n+3 | sort], [0], [dnl
>>>> -1.1.2.92                                      f8:bc:12:44:34:b6   br0
>>>> +1.1.2.92                                      f8:bc:12:44:34:b6   vtep0
>>>>  ])
>>>>
>>>>  dnl Check GRE tunnel pop.
>>>> -- 
>>>> 2.21.0
>>>>
>>>> _______________________________________________
>>>> dev mailing list
>>>> [email protected]
>>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>>
> 



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

Reply via email to