/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <netinet/in.h>
+#include <linux/fib_rules.h>
#include <linux/if_addrlabel.h>
#include <linux/if_bridge.h>
#include <linux/nexthop.h>
return 0;
}
-int sd_rtnl_message_route_get_tos(const sd_netlink_message *m, unsigned char *tos) {
+int sd_rtnl_message_route_get_tos(const sd_netlink_message *m, uint8_t *tos) {
struct rtmsg *rtm;
assert_return(m, -EINVAL);
}
int sd_rtnl_message_new_routing_policy_rule(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int ifal_family) {
- struct rtmsg *rtm;
+ struct fib_rule_hdr *frh;
int r;
assert_return(rtnl_message_type_is_routing_policy_rule(nlmsg_type), -EINVAL);
if (nlmsg_type == RTM_NEWRULE)
(*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
- rtm = NLMSG_DATA((*ret)->hdr);
- rtm->rtm_family = ifal_family;
- rtm->rtm_protocol = RTPROT_BOOT;
- rtm->rtm_scope = RT_SCOPE_UNIVERSE;
- rtm->rtm_type = RTN_UNICAST;
+ frh = NLMSG_DATA((*ret)->hdr);
+ frh->family = ifal_family;
+ frh->action = FR_ACT_TO_TBL;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, unsigned char tos) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, uint8_t tos) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
+ frh = NLMSG_DATA(m->hdr);
- routing_policy_rule->rtm_tos = tos;
+ frh->tos = tos;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_get_tos(const sd_netlink_message *m, unsigned char *tos) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_get_tos(const sd_netlink_message *m, uint8_t *tos) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
+ frh = NLMSG_DATA(m->hdr);
- *tos = routing_policy_rule->rtm_tos;
+ *tos = frh->tos;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, unsigned char table) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, uint8_t table) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
+ frh = NLMSG_DATA(m->hdr);
- routing_policy_rule->rtm_table = table;
+ frh->table = table;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_get_table(const sd_netlink_message *m, unsigned char *table) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_get_table(const sd_netlink_message *m, uint8_t *table) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
+ frh = NLMSG_DATA(m->hdr);
- *table = routing_policy_rule->rtm_table;
+ *table = frh->table;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, unsigned flags) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, uint32_t flags) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
- routing_policy_rule->rtm_flags |= flags;
+ frh = NLMSG_DATA(m->hdr);
+ frh->flags |= flags;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_get_flags(const sd_netlink_message *m, unsigned *flags) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_get_flags(const sd_netlink_message *m, uint32_t *flags) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
- *flags = routing_policy_rule->rtm_flags;
+ frh = NLMSG_DATA(m->hdr);
+ *flags = frh->flags;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_set_rtm_type(sd_netlink_message *m, unsigned char type) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_set_fib_type(sd_netlink_message *m, uint8_t type) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
+ frh = NLMSG_DATA(m->hdr);
- routing_policy_rule->rtm_type = type;
+ frh->action = type;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_get_rtm_type(const sd_netlink_message *m, unsigned char *type) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_get_fib_type(const sd_netlink_message *m, uint8_t *type) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
+ frh = NLMSG_DATA(m->hdr);
- *type = routing_policy_rule->rtm_type;
+ *type = frh->action;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_set_rtm_dst_prefixlen(sd_netlink_message *m, unsigned char len) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen(sd_netlink_message *m, uint8_t len) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
+ frh = NLMSG_DATA(m->hdr);
- routing_policy_rule->rtm_dst_len = len;
+ frh->dst_len = len;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_get_rtm_dst_prefixlen(const sd_netlink_message *m, unsigned char *len) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_get_fib_dst_prefixlen(const sd_netlink_message *m, uint8_t *len) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
+ frh = NLMSG_DATA(m->hdr);
- *len = routing_policy_rule->rtm_dst_len;
+ *len = frh->dst_len;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_set_rtm_src_prefixlen(sd_netlink_message *m, unsigned char len) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen(sd_netlink_message *m, uint8_t len) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
+ frh = NLMSG_DATA(m->hdr);
- routing_policy_rule->rtm_src_len = len;
+ frh->src_len = len;
return 0;
}
-int sd_rtnl_message_routing_policy_rule_get_rtm_src_prefixlen(const sd_netlink_message *m, unsigned char *len) {
- struct rtmsg *routing_policy_rule;
+int sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(const sd_netlink_message *m, uint8_t *len) {
+ struct fib_rule_hdr *frh;
assert_return(m, -EINVAL);
assert_return(m->hdr, -EINVAL);
assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL);
- routing_policy_rule = NLMSG_DATA(m->hdr);
+ frh = NLMSG_DATA(m->hdr);
- *len = routing_policy_rule->rtm_src_len;
+ *len = frh->src_len;
return 0;
}
int sd_rtnl_message_addrlabel_get_prefixlen(const sd_netlink_message *m, unsigned char *prefixlen);
int sd_rtnl_message_new_routing_policy_rule(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int ifal_family);
-int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, unsigned char tos);
-int sd_rtnl_message_routing_policy_rule_get_tos(const sd_netlink_message *m, unsigned char *tos);
-int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, unsigned char table);
-int sd_rtnl_message_routing_policy_rule_get_table(const sd_netlink_message *m, unsigned char *table);
-int sd_rtnl_message_routing_policy_rule_set_rtm_src_prefixlen(sd_netlink_message *m, unsigned char len);
-int sd_rtnl_message_routing_policy_rule_get_rtm_src_prefixlen(const sd_netlink_message *m, unsigned char *len);
-int sd_rtnl_message_routing_policy_rule_set_rtm_dst_prefixlen(sd_netlink_message *m, unsigned char len);
-int sd_rtnl_message_routing_policy_rule_get_rtm_dst_prefixlen(const sd_netlink_message *m, unsigned char *len);
-int sd_rtnl_message_routing_policy_rule_set_rtm_type(sd_netlink_message *m, unsigned char type);
-int sd_rtnl_message_routing_policy_rule_get_rtm_type(const sd_netlink_message *m, unsigned char *type);
-int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, unsigned flags);
-int sd_rtnl_message_routing_policy_rule_get_flags(const sd_netlink_message *m, unsigned *flags);
+int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, uint8_t tos);
+int sd_rtnl_message_routing_policy_rule_get_tos(const sd_netlink_message *m, uint8_t *tos);
+int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, uint8_t table);
+int sd_rtnl_message_routing_policy_rule_get_table(const sd_netlink_message *m, uint8_t *table);
+int sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen(sd_netlink_message *m, uint8_t len);
+int sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(const sd_netlink_message *m, uint8_t *len);
+int sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen(sd_netlink_message *m, uint8_t len);
+int sd_rtnl_message_routing_policy_rule_get_fib_dst_prefixlen(const sd_netlink_message *m, uint8_t *len);
+int sd_rtnl_message_routing_policy_rule_set_fib_type(sd_netlink_message *m, uint8_t type);
+int sd_rtnl_message_routing_policy_rule_get_fib_type(const sd_netlink_message *m, uint8_t *type);
+int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, uint32_t flags);
+int sd_rtnl_message_routing_policy_rule_get_flags(const sd_netlink_message *m, uint32_t *flags);
int sd_rtnl_message_new_qdisc(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex);
int sd_rtnl_message_set_qdisc_parent(sd_netlink_message *m, uint32_t parent);