49 #include <netlink-private/netlink.h>
51 void xfrmnl_user_tmpl_free(
struct xfrmnl_user_tmpl* utmpl)
72 struct xfrmnl_user_tmpl* utmpl;
74 utmpl = calloc(1,
sizeof(
struct xfrmnl_user_tmpl));
78 nl_init_list_head(&utmpl->utmpl_list);
91 struct xfrmnl_user_tmpl*
new;
95 memcpy ((
void*)
new, (
void*)utmpl,
sizeof (
struct xfrmnl_user_tmpl));
109 static const struct trans_tbl tmpl_modes[] = {
110 __ADD(XFRM_MODE_TRANSPORT, transport),
111 __ADD(XFRM_MODE_TUNNEL, tunnel),
112 __ADD(XFRM_MODE_ROUTEOPTIMIZATION, route optimization),
113 __ADD(XFRM_MODE_IN_TRIGGER, in trigger),
114 __ADD(XFRM_MODE_BEET, beet),
117 char* xfrmnl_user_tmpl_mode2str(
int mode,
char *buf,
size_t len)
119 return __type2str (mode, buf, len, tmpl_modes, ARRAY_SIZE(tmpl_modes));
122 int xfrmnl_user_tmpl_str2mode(
const char *name)
124 return __str2type (name, tmpl_modes, ARRAY_SIZE(tmpl_modes));
145 (a->id.spi != b->id.spi) ||
146 (a->id.proto && (a->id.proto != b->id.proto)) ||
148 (a->family != b->family) ||
149 (a->reqid != b->reqid) ||
150 (a->mode != b->mode) ||
151 (a->share != b->share) ||
152 (a->aalgos != b->aalgos) ||
153 (a->ealgos != b->ealgos) ||
154 (a->calgos != b->calgos))
161 void xfrmnl_user_tmpl_dump(
struct xfrmnl_user_tmpl* tmpl,
struct nl_dump_params *p)
163 char dst[INET6_ADDRSTRLEN+5], src[INET6_ADDRSTRLEN+5];
166 nl_dump_line(p,
"\t\tsrc %s dst %s family: %s \n",
169 nl_af2str (tmpl->family, buf, 128));
170 nl_dump_line (p,
"\t\tprotocol: %s spi: 0x%x reqid: %u mode: %s\n",
171 nl_ip_proto2str (tmpl->id.proto, buf,
sizeof(buf)),
172 tmpl->id.spi, tmpl->reqid,
173 xfrmnl_user_tmpl_mode2str (tmpl->mode, buf, 128));
174 nl_dump_line (p,
"\t\tAuth Algo: 0x%x Crypto Algo: 0x%x Compr Algo: 0x%x\n",
175 tmpl->aalgos, tmpl->ealgos, tmpl->calgos);
186 struct nl_addr* xfrmnl_user_tmpl_get_daddr (
struct xfrmnl_user_tmpl* utmpl)
188 return utmpl->id.daddr;
191 int xfrmnl_user_tmpl_set_daddr (
struct xfrmnl_user_tmpl* utmpl,
struct nl_addr* addr)
197 utmpl->id.daddr = addr;
202 int xfrmnl_user_tmpl_get_spi (
struct xfrmnl_user_tmpl* utmpl)
204 return utmpl->id.spi;
207 int xfrmnl_user_tmpl_set_spi (
struct xfrmnl_user_tmpl* utmpl,
unsigned int spi)
214 int xfrmnl_user_tmpl_get_proto (
struct xfrmnl_user_tmpl* utmpl)
216 return utmpl->id.proto;
219 int xfrmnl_user_tmpl_set_proto (
struct xfrmnl_user_tmpl* utmpl,
unsigned int protocol)
221 utmpl->id.proto = protocol;
226 int xfrmnl_user_tmpl_get_family(
struct xfrmnl_user_tmpl *utmpl)
228 return utmpl->family;
231 int xfrmnl_user_tmpl_set_family(
struct xfrmnl_user_tmpl *utmpl,
int family)
233 utmpl->family = family;
238 struct nl_addr* xfrmnl_user_tmpl_get_saddr (
struct xfrmnl_user_tmpl* utmpl)
243 int xfrmnl_user_tmpl_set_saddr (
struct xfrmnl_user_tmpl* utmpl,
struct nl_addr* addr)
254 int xfrmnl_user_tmpl_get_reqid (
struct xfrmnl_user_tmpl* utmpl)
259 int xfrmnl_user_tmpl_set_reqid (
struct xfrmnl_user_tmpl* utmpl,
unsigned int reqid)
261 utmpl->reqid = reqid;
266 int xfrmnl_user_tmpl_get_mode (
struct xfrmnl_user_tmpl* utmpl)
271 int xfrmnl_user_tmpl_set_mode (
struct xfrmnl_user_tmpl* utmpl,
unsigned int mode)
278 int xfrmnl_user_tmpl_get_share (
struct xfrmnl_user_tmpl* utmpl)
283 int xfrmnl_user_tmpl_set_share (
struct xfrmnl_user_tmpl* utmpl,
unsigned int share)
285 utmpl->share = share;
290 int xfrmnl_user_tmpl_get_optional (
struct xfrmnl_user_tmpl* utmpl)
292 return utmpl->optional;
295 int xfrmnl_user_tmpl_set_optional (
struct xfrmnl_user_tmpl* utmpl,
unsigned int optional)
297 utmpl->optional = optional;
302 int xfrmnl_user_tmpl_get_aalgos (
struct xfrmnl_user_tmpl* utmpl)
304 return utmpl->aalgos;
307 int xfrmnl_user_tmpl_set_aalgos (
struct xfrmnl_user_tmpl* utmpl,
unsigned int aalgos)
309 utmpl->aalgos = aalgos;
314 int xfrmnl_user_tmpl_get_ealgos (
struct xfrmnl_user_tmpl* utmpl)
316 return utmpl->ealgos;
319 int xfrmnl_user_tmpl_set_ealgos (
struct xfrmnl_user_tmpl* utmpl,
unsigned int ealgos)
321 utmpl->ealgos = ealgos;
326 int xfrmnl_user_tmpl_get_calgos (
struct xfrmnl_user_tmpl* utmpl)
328 return utmpl->calgos;
331 int xfrmnl_user_tmpl_set_calgos (
struct xfrmnl_user_tmpl* utmpl,
unsigned int calgos)
333 utmpl->calgos = calgos;
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.
void nl_addr_put(struct nl_addr *addr)
Decrease the reference counter of an abstract address.
struct xfrmnl_user_tmpl * xfrmnl_user_tmpl_clone(struct xfrmnl_user_tmpl *utmpl)
Clone existing user template object.
struct xfrmnl_user_tmpl * xfrmnl_user_tmpl_alloc()
Allocate new user template object.
int xfrmnl_user_tmpl_cmp(struct xfrmnl_user_tmpl *a, struct xfrmnl_user_tmpl *b)
Compares two user template objects.
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.