diff --git a/src/neigh.c b/src/neigh.c index f72048f426f373ffd9a30817f8d01b269ed83cf1..8efb28eace7c0f5b9367506af7cc3e287661fb56 100644 --- a/src/neigh.c +++ b/src/neigh.c @@ -928,6 +928,19 @@ int neigh_set_1905(void *nq, uint8_t *macaddr, uint8_t val) return 0; } +int neigh_set_remote(void *q, uint8_t *macaddr, uint8_t val) +{ + struct neigh_entry *e = NULL; + + e = neigh_lookup(q, macaddr); + if (!e) + return -1; + + e->isremote = !!val; + + return 0; +} + //TODO: int neigh_set_1905_linkaddr(void *nq, uint8_t *aladdr, uint8_t *linkaddr) { diff --git a/src/neigh.h b/src/neigh.h index 79517bc36e751c6c134fca00a07803d93db26e4a..858a530288b1d989d2c9ea1b037d6ad5eab1645f 100644 --- a/src/neigh.h +++ b/src/neigh.h @@ -186,6 +186,7 @@ void neigh_probe_unreachable(void *nq, const char *ifname); void neigh_mark_reachable(void *nq, uint8_t *macaddr, const char *ifname); int neigh_set_type(void *q, uint8_t *macaddr, enum neigh_type type); +int neigh_set_remote(void *q, uint8_t *macaddr, uint8_t val); uint16_t neigh_get_brport(void *q, uint8_t *macaddr); int neigh_set_1905(void *q, uint8_t *macaddr, uint8_t val); int neigh_set_1905_slave(void *nq, uint8_t *macaddr, uint8_t *aladdr, uint8_t val); diff --git a/src/ubus.c b/src/ubus.c index 501ecfe7c8d3e1f8195543bc9072678f7043cfb8..edfb7a94435fac0c30d84c4eee651dd04f2beb6d 100644 --- a/src/ubus.c +++ b/src/ubus.c @@ -341,8 +341,12 @@ static void hostmngr_1905topology_cb(struct ubus_request *req, int type, dbg("%s: Nbr " MACFMT "\n", __func__, MAC2STR(nbr_macaddr)); dbg("%s: Nif " MACFMT "\n", __func__, MAC2STR(nbr_viaaddr)); - if (!memcmp(nbr_macaddr, priv->ieee1905id, 6)) + if (!memcmp(nbr_macaddr, priv->ieee1905id, 6)) { neigh_set_1905_linkaddr(&priv->neigh_q, node_aladdr, nbr_viaaddr); + neigh_set_remote(&priv->neigh_q, nbr_viaaddr, 0); + } else { + neigh_set_remote(&priv->neigh_q, nbr_viaaddr, 1); + } iter++; }