From b08b53971c29ffe6350f669da364f5ee2deb7ead Mon Sep 17 00:00:00 2001 From: arbala <bala.arunachalam@iopsys.eu> Date: Mon, 21 Oct 2024 09:32:02 +0200 Subject: [PATCH] Fix for ethernet host under correct node --- src/netlink.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/netlink.c b/src/netlink.c index 42d8e15..df7bd77 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -154,21 +154,43 @@ int hostmngr_update_neigh_brport(struct hostmngr_private *priv, char *brname) for (i = 0; i < num; i++) { struct neigh_entry *t; + char *ifname = NULL; dbg("FDB[%d] : " MACFMT " port = %hu\n", i, MAC2STR(fdbs[i].macaddr), fdbs[i].port); t = neigh_lookup(&priv->neigh_q, fdbs[i].macaddr); + ifname = hostmngr_brport_to_ifname(priv, fdbs[i].port); if (t) { t->brport = fdbs[i].port; - char *ifname; - ifname = hostmngr_brport_to_ifname(priv, fdbs[i].port); if (ifname) { memset(t->ifname, 0, 16); strncpy(t->ifname, ifname, 16); } } + else { + /* create a new neigh just learnt from br-fdb */ + struct neigh_entry *new = NULL; + enum if_mediatype mtype; + if (ifname) { + if_getmediatype(ifname, &mtype); + if (mtype == IF_MEDIA_ETH) { + new = neigh_enqueue(&priv->neigh_q, + fdbs[i].macaddr, + NEIGH_STATE_REACHABLE, + ifname, + NEIGH_TYPE_ETH, + NULL, + NEIGH_AGEOUT_DEFAULT, + NULL); + if (new) { + new->brport = fdbs[i].port; + dbg("%s: Added new neighbor: " MACFMT " on port %hu\n", __func__, MAC2STR(fdbs[i].macaddr), fdbs[i].port); + } + } + } + } } return 0; -- GitLab