49 #include <netlink-private/netlink.h> 51 static void sel_destroy(
struct xfrmnl_sel* sel)
58 fprintf(stderr,
"BUG: %s:%d\n", __FILE__, __LINE__);
78 struct xfrmnl_sel* sel;
80 sel = calloc(1,
sizeof(
struct xfrmnl_sel));
97 struct xfrmnl_sel*
new;
103 memcpy(
new, sel,
sizeof(
struct xfrmnl_sel));
117 struct xfrmnl_sel* xfrmnl_sel_get(
struct xfrmnl_sel* sel)
124 void xfrmnl_sel_put(
struct xfrmnl_sel* sel)
129 if (sel->refcnt == 1)
142 return sel->refcnt > 1;
165 ((a->sport & a->sport_mask) != (b->sport & b->sport_mask)) ||
166 ((a->dport & a->dport_mask) != (b->dport & b->dport_mask)) ||
167 (a->family != b->family) ||
168 (a->proto && (a->proto != b->proto)) ||
169 (a->ifindex && a->ifindex != b->ifindex) ||
170 (a->user != b->user))
177 void xfrmnl_sel_dump(
struct xfrmnl_sel* sel,
struct nl_dump_params *p)
179 char dst[INET6_ADDRSTRLEN+5], src[INET6_ADDRSTRLEN+5];
182 nl_dump_line(p,
"\t\tsrc %s dst %s family: %s\n",
nl_addr2str(sel->saddr, src,
sizeof(src)),
183 nl_addr2str (sel->daddr, dst, sizeof (dst)), nl_af2str (sel->family, buf, 128));
184 nl_dump_line (p,
"\t\tsrc port/mask: %d/%d dst port/mask: %d/%d\n",
185 sel->dport, sel->dport_mask, sel->sport, sel->sport_mask);
186 nl_dump_line (p,
"\t\tprotocol: %s ifindex: %u user: %u\n",
187 nl_ip_proto2str (sel->proto, buf,
sizeof(buf)), sel->ifindex, sel->user);
199 struct nl_addr* xfrmnl_sel_get_daddr (
struct xfrmnl_sel* sel)
204 int xfrmnl_sel_set_daddr (
struct xfrmnl_sel* sel,
struct nl_addr* addr)
215 struct nl_addr* xfrmnl_sel_get_saddr (
struct xfrmnl_sel* sel)
220 int xfrmnl_sel_set_saddr (
struct xfrmnl_sel* sel,
struct nl_addr* addr)
231 int xfrmnl_sel_get_dport (
struct xfrmnl_sel* sel)
236 int xfrmnl_sel_set_dport (
struct xfrmnl_sel* sel,
unsigned int dport)
243 int xfrmnl_sel_get_dportmask (
struct xfrmnl_sel* sel)
245 return sel->dport_mask;
248 int xfrmnl_sel_set_dportmask (
struct xfrmnl_sel* sel,
unsigned int dport_mask)
250 sel->dport_mask = dport_mask;
255 int xfrmnl_sel_get_sport (
struct xfrmnl_sel* sel)
260 int xfrmnl_sel_set_sport (
struct xfrmnl_sel* sel,
unsigned int sport)
267 int xfrmnl_sel_get_sportmask (
struct xfrmnl_sel* sel)
269 return sel->sport_mask;
272 int xfrmnl_sel_set_sportmask (
struct xfrmnl_sel* sel,
unsigned int sport_mask)
274 sel->sport_mask = sport_mask;
279 int xfrmnl_sel_get_family(
struct xfrmnl_sel *sel)
284 int xfrmnl_sel_set_family(
struct xfrmnl_sel *sel,
int family)
286 sel->family = family;
291 int xfrmnl_sel_get_prefixlen_d (
struct xfrmnl_sel* sel)
293 return sel->prefixlen_d;
296 int xfrmnl_sel_set_prefixlen_d (
struct xfrmnl_sel* sel,
unsigned int prefixlen)
298 sel->prefixlen_d = prefixlen;
303 int xfrmnl_sel_get_prefixlen_s (
struct xfrmnl_sel* sel)
305 return sel->prefixlen_s;
308 int xfrmnl_sel_set_prefixlen_s (
struct xfrmnl_sel* sel,
unsigned int prefixlen)
310 sel->prefixlen_s = prefixlen;
315 int xfrmnl_sel_get_proto (
struct xfrmnl_sel* sel)
320 int xfrmnl_sel_set_proto (
struct xfrmnl_sel* sel,
unsigned int protocol)
322 sel->proto = protocol;
327 int xfrmnl_sel_get_ifindex (
struct xfrmnl_sel* sel)
332 int xfrmnl_sel_set_ifindex (
struct xfrmnl_sel* sel,
unsigned int ifindex)
334 sel->ifindex = ifindex;
339 int xfrmnl_sel_get_userid (
struct xfrmnl_sel* sel)
344 int xfrmnl_sel_set_userid (
struct xfrmnl_sel* sel,
unsigned int userid)
struct nl_addr * nl_addr_clone(const struct nl_addr *addr)
Clone existing abstract address object.
struct nl_addr * nl_addr_get(struct nl_addr *addr)
Increase the reference counter of an abstract address.
int xfrmnl_sel_shared(struct xfrmnl_sel *sel)
Check whether an selector object is shared.
int xfrmnl_sel_cmp(struct xfrmnl_sel *a, struct xfrmnl_sel *b)
Compares two selector objects.
void nl_addr_put(struct nl_addr *addr)
Decrease the reference counter of an abstract address.
struct xfrmnl_sel * xfrmnl_sel_alloc()
Allocate new selector object.
struct xfrmnl_sel * xfrmnl_sel_clone(struct xfrmnl_sel *sel)
Clone existing selector object.
int nl_addr_cmp_prefix(const struct nl_addr *a, const struct nl_addr *b)
Compare the prefix of two abstract addresses.
char * nl_addr2str(const struct nl_addr *addr, char *buf, size_t size)
Convert abstract address object to character string.