diff --git a/main/api.c b/main/api.c index 7f07d8c42..8fd6ac42e 100644 --- a/main/api.c +++ b/main/api.c @@ -83,7 +83,7 @@ static LIST_HEAD(, api_ctx) clients = LIST_HEAD_INITIALIZER(clients); // PID of the current request while API handler is called. static __thread pid_t cur_req_pid; -static void api_send_notifications(uint32_t ev_type, const void *obj) { +void api_send_notifications(uint32_t ev_type, const void *obj) { struct subscription *ev_subs = NULL; struct module_subscribers *subs; struct subscription *s; @@ -498,14 +498,7 @@ void api_socket_stop(struct event_base *) { disconnect_client(ctx); } -static struct gr_event_subscription ev_subscribtion = { - .callback = api_send_notifications, - .ev_count = 1, - .ev_types = {EVENT_TYPE_ALL}, -}; - RTE_INIT(init) { - gr_event_subscribe(&ev_subscribtion); gr_register_api_handler(&subscribe_handler); gr_register_api_handler(&unsubscribe_handler); gr_register_api_handler(&hello_handler); diff --git a/main/api.h b/main/api.h index 27f513d73..8ff801135 100644 --- a/main/api.h +++ b/main/api.h @@ -7,3 +7,4 @@ int api_socket_start(struct event_base *); void api_socket_stop(struct event_base *); +void api_send_notifications(uint32_t ev_type, const void *obj); diff --git a/main/event.c b/main/event.c index a294e8d5a..7f6aabe42 100644 --- a/main/event.c +++ b/main/event.c @@ -1,6 +1,8 @@ // SPDX-License-Identifier: BSD-3-Clause // Copyright (c) 2025 Robin Jarry +#include "api.h" + #include #include #include @@ -26,6 +28,7 @@ void gr_event_push(uint32_t ev_type, const void *obj) { } } } + api_send_notifications(ev_type, obj); } STAILQ_HEAD(serializers, gr_event_serializer); diff --git a/modules/infra/control/gr_netlink.h b/modules/infra/control/gr_netlink.h index c7cc78087..73abd6da6 100644 --- a/modules/infra/control/gr_netlink.h +++ b/modules/infra/control/gr_netlink.h @@ -18,3 +18,4 @@ int netlink_del_addr4(const char *ifname, ip4_addr_t ip); int netlink_add_addr6(const char *ifname, const struct rte_ipv6_addr *ip); int netlink_del_addr6(const char *ifname, const struct rte_ipv6_addr *ip); int netlink_set_addr_gen_mode_none(const char *ifname); +int netlink_set_ifalias(const char *ifname, const char *ifalias); diff --git a/modules/infra/control/netlink.c b/modules/infra/control/netlink.c index 2e281c736..4409104c7 100644 --- a/modules/infra/control/netlink.c +++ b/modules/infra/control/netlink.c @@ -14,6 +14,9 @@ #include #include +// IFALIASZ is defined in linux/if.h +#define IFALIASZ 256 + static char socket_buf[BUFSIZ]; static struct mnl_socket *nl_sock; static int nl_seq; @@ -292,6 +295,30 @@ int netlink_set_addr_gen_mode_none(const char *ifname) { return netlink_send_req(nlh); } +int netlink_set_ifalias(const char *ifname, const char *ifalias) { + char buf[NLMSG_SPACE(sizeof(struct ifinfomsg) + NLA_SPACE(IFALIASZ))]; + struct ifinfomsg *ifm; + struct nlmsghdr *nlh; + int ifindex; + + ifindex = if_nametoindex(ifname); + if (!ifindex) + return errno_set(ENODEV); + + memset(buf, 0, sizeof(buf)); + nlh = mnl_nlmsg_put_header(buf); + nlh->nlmsg_type = RTM_NEWLINK; + nlh->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK; + + ifm = mnl_nlmsg_put_extra_header(nlh, sizeof(*ifm)); + ifm->ifi_family = AF_UNSPEC; + ifm->ifi_index = ifindex; + + mnl_attr_put_strz(nlh, IFLA_IFALIAS, ifalias); + + return netlink_send_req(nlh); +} + static void netlink_init(struct event_base *) { nl_sock = mnl_socket_open(NETLINK_ROUTE); if (!nl_sock) diff --git a/subprojects/packagefiles/frr/meson-add-dependency-definition.patch b/subprojects/packagefiles/frr/meson-add-dependency-definition.patch index 29310aa9b..0b1991562 100644 --- a/subprojects/packagefiles/frr/meson-add-dependency-definition.patch +++ b/subprojects/packagefiles/frr/meson-add-dependency-definition.patch @@ -104,11 +104,11 @@ index 0000000..d26e979 + '--prefix="' + prefix + '" ' + + '--with-moduledir="' + moduledir + '" ' + + '--disable-doc --enable-multipath=128 ' + -+ '--disable-ripd --disable-ripngd --disable-ospfd --disable-ospf6d ' + ++ '--disable-ripd --disable-ripngd ' + + '--disable-ldpd --disable-nhrpd --disable-eigrpd --disable-babeld ' + -+ '--disable-isisd --disable-pimd --disable-pim6d --disable-pbrd --disable-fabricd ' + ++ '--disable-pimd --disable-pim6d --disable-pbrd --disable-fabricd ' + + '--disable-vrrpd --disable-pathd --disable-ospfapi --disable-ospfclient ' + -+ '--disable-bfdd --disable-python-runtime ' + extra_configure_option + ' ' + ++ '--disable-python-runtime ' + extra_configure_option + ' ' + + '&& touch "' + configure_stamp + '"' + ], + depends: bootstrap,