49 #include <netlink/xfrm/selector.h> 50 #include <netlink-private/netlink.h> 52 static void sel_destroy(
struct xfrmnl_sel* sel)
59 fprintf(stderr,
"BUG: %s:%d\n", __FILE__, __LINE__);
79 struct xfrmnl_sel* sel;
81 sel = calloc(1,
sizeof(
struct xfrmnl_sel));
98 struct xfrmnl_sel*
new;
104 memcpy(
new, sel,
sizeof(
struct xfrmnl_sel));
118 struct xfrmnl_sel* xfrmnl_sel_get(
struct xfrmnl_sel* sel)
125 void xfrmnl_sel_put(
struct xfrmnl_sel* sel)
130 if (sel->refcnt == 1)
143 return sel->refcnt > 1;
166 ((a->sport & a->sport_mask) != (b->sport & b->sport_mask)) ||
167 ((a->dport & a->dport_mask) != (b->dport & b->dport_mask)) ||
168 (a->family != b->family) ||
169 (a->proto && (a->proto != b->proto)) ||
170 (a->ifindex && a->ifindex != b->ifindex) ||
171 (a->user != b->user))
178 void xfrmnl_sel_dump(
struct xfrmnl_sel* sel,
struct nl_dump_params *p)
180 char dst[INET6_ADDRSTRLEN+5], src[INET6_ADDRSTRLEN+5];
183 nl_dump_line(p,
"\t\tsrc %s dst %s family: %s\n",
nl_addr2str(sel->saddr, src,
sizeof(src)),
184 nl_addr2str (sel->daddr, dst, sizeof (dst)), nl_af2str (sel->family, buf, 128));
185 nl_dump_line (p,
"\t\tsrc port/mask: %d/%d dst port/mask: %d/%d\n",
186 sel->dport, sel->dport_mask, sel->sport, sel->sport_mask);
187 nl_dump_line (p,
"\t\tprotocol: %s ifindex: %u user: %u\n",
188 nl_ip_proto2str (sel->proto, buf,
sizeof(buf)), sel->ifindex, sel->user);
200 struct nl_addr* xfrmnl_sel_get_daddr (
struct xfrmnl_sel* sel)
205 int xfrmnl_sel_set_daddr (
struct xfrmnl_sel* sel,
struct nl_addr* addr)
216 struct nl_addr* xfrmnl_sel_get_saddr (
struct xfrmnl_sel* sel)
221 int xfrmnl_sel_set_saddr (
struct xfrmnl_sel* sel,
struct nl_addr* addr)
232 int xfrmnl_sel_get_dport (
struct xfrmnl_sel* sel)
237 int xfrmnl_sel_set_dport (
struct xfrmnl_sel* sel,
unsigned int dport)
244 int xfrmnl_sel_get_dportmask (
struct xfrmnl_sel* sel)
246 return sel->dport_mask;
249 int xfrmnl_sel_set_dportmask (
struct xfrmnl_sel* sel,
unsigned int dport_mask)
251 sel->dport_mask = dport_mask;
256 int xfrmnl_sel_get_sport (
struct xfrmnl_sel* sel)
261 int xfrmnl_sel_set_sport (
struct xfrmnl_sel* sel,
unsigned int sport)
268 int xfrmnl_sel_get_sportmask (
struct xfrmnl_sel* sel)
270 return sel->sport_mask;
273 int xfrmnl_sel_set_sportmask (
struct xfrmnl_sel* sel,
unsigned int sport_mask)
275 sel->sport_mask = sport_mask;
280 int xfrmnl_sel_get_family(
struct xfrmnl_sel *sel)
285 int xfrmnl_sel_set_family(
struct xfrmnl_sel *sel,
unsigned int family)
287 sel->family = family;
292 int xfrmnl_sel_get_prefixlen_d (
struct xfrmnl_sel* sel)
294 return sel->prefixlen_d;
297 int xfrmnl_sel_set_prefixlen_d (
struct xfrmnl_sel* sel,
unsigned int prefixlen)
299 sel->prefixlen_d = prefixlen;
304 int xfrmnl_sel_get_prefixlen_s (
struct xfrmnl_sel* sel)
306 return sel->prefixlen_s;
309 int xfrmnl_sel_set_prefixlen_s (
struct xfrmnl_sel* sel,
unsigned int prefixlen)
311 sel->prefixlen_s = prefixlen;
316 int xfrmnl_sel_get_proto (
struct xfrmnl_sel* sel)
321 int xfrmnl_sel_set_proto (
struct xfrmnl_sel* sel,
unsigned int protocol)
323 sel->proto = protocol;
328 int xfrmnl_sel_get_ifindex (
struct xfrmnl_sel* sel)
333 int xfrmnl_sel_set_ifindex (
struct xfrmnl_sel* sel,
unsigned int ifindex)
335 sel->ifindex = ifindex;
340 int xfrmnl_sel_get_userid (
struct xfrmnl_sel* sel)
345 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.