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;
101 memcpy ((
void*)
new, (
void*)sel,
sizeof (
struct xfrmnl_sel));
116 struct xfrmnl_sel* xfrmnl_sel_get(
struct xfrmnl_sel* sel)
123 void xfrmnl_sel_put(
struct xfrmnl_sel* sel)
128 if (sel->refcnt == 1)
141 return sel->refcnt > 1;
164 ((a->sport & a->sport_mask) != (b->sport & b->sport_mask)) ||
165 ((a->dport & a->dport_mask) != (b->dport & b->dport_mask)) ||
166 (a->family != b->family) ||
167 (a->proto && (a->proto != b->proto)) ||
168 (a->ifindex && a->ifindex != b->ifindex) ||
169 (a->user != b->user))
176 void xfrmnl_sel_dump(
struct xfrmnl_sel* sel,
struct nl_dump_params *p)
178 char dst[INET6_ADDRSTRLEN+5], src[INET6_ADDRSTRLEN+5];
181 nl_dump_line(p,
"\t\tsrc %s dst %s family: %s\n",
nl_addr2str(sel->saddr, src,
sizeof(src)),
182 nl_addr2str (sel->daddr, dst, sizeof (dst)), nl_af2str (sel->family, buf, 128));
183 nl_dump_line (p,
"\t\tsrc port/mask: %d/%d dst port/mask: %d/%d\n",
184 sel->dport, sel->dport_mask, sel->sport, sel->sport_mask);
185 nl_dump_line (p,
"\t\tprotocol: %s ifindex: %u user: %u\n",
186 nl_ip_proto2str (sel->proto, buf,
sizeof(buf)), sel->ifindex, sel->user);
198 struct nl_addr* xfrmnl_sel_get_daddr (
struct xfrmnl_sel* sel)
203 int xfrmnl_sel_set_daddr (
struct xfrmnl_sel* sel,
struct nl_addr* addr)
214 struct nl_addr* xfrmnl_sel_get_saddr (
struct xfrmnl_sel* sel)
219 int xfrmnl_sel_set_saddr (
struct xfrmnl_sel* sel,
struct nl_addr* addr)
230 int xfrmnl_sel_get_dport (
struct xfrmnl_sel* sel)
235 int xfrmnl_sel_set_dport (
struct xfrmnl_sel* sel,
unsigned int dport)
242 int xfrmnl_sel_get_dportmask (
struct xfrmnl_sel* sel)
244 return sel->dport_mask;
247 int xfrmnl_sel_set_dportmask (
struct xfrmnl_sel* sel,
unsigned int dport_mask)
249 sel->dport_mask = dport_mask;
254 int xfrmnl_sel_get_sport (
struct xfrmnl_sel* sel)
259 int xfrmnl_sel_set_sport (
struct xfrmnl_sel* sel,
unsigned int sport)
266 int xfrmnl_sel_get_sportmask (
struct xfrmnl_sel* sel)
268 return sel->sport_mask;
271 int xfrmnl_sel_set_sportmask (
struct xfrmnl_sel* sel,
unsigned int sport_mask)
273 sel->sport_mask = sport_mask;
278 int xfrmnl_sel_get_family(
struct xfrmnl_sel *sel)
283 int xfrmnl_sel_set_family(
struct xfrmnl_sel *sel,
int family)
285 sel->family = family;
290 int xfrmnl_sel_get_prefixlen_d (
struct xfrmnl_sel* sel)
292 return sel->prefixlen_d;
295 int xfrmnl_sel_set_prefixlen_d (
struct xfrmnl_sel* sel,
unsigned int prefixlen)
297 sel->prefixlen_d = prefixlen;
302 int xfrmnl_sel_get_prefixlen_s (
struct xfrmnl_sel* sel)
304 return sel->prefixlen_s;
307 int xfrmnl_sel_set_prefixlen_s (
struct xfrmnl_sel* sel,
unsigned int prefixlen)
309 sel->prefixlen_s = prefixlen;
314 int xfrmnl_sel_get_proto (
struct xfrmnl_sel* sel)
319 int xfrmnl_sel_set_proto (
struct xfrmnl_sel* sel,
unsigned int protocol)
321 sel->proto = protocol;
326 int xfrmnl_sel_get_ifindex (
struct xfrmnl_sel* sel)
331 int xfrmnl_sel_set_ifindex (
struct xfrmnl_sel* sel,
unsigned int ifindex)
333 sel->ifindex = ifindex;
338 int xfrmnl_sel_get_userid (
struct xfrmnl_sel* sel)
343 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.