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;
97 memcpy(
new, utmpl,
sizeof(
struct xfrmnl_user_tmpl));
110 static const struct trans_tbl tmpl_modes[] = {
111 __ADD(XFRM_MODE_TRANSPORT, transport),
112 __ADD(XFRM_MODE_TUNNEL, tunnel),
113 __ADD(XFRM_MODE_ROUTEOPTIMIZATION, route optimization),
114 __ADD(XFRM_MODE_IN_TRIGGER, in trigger),
115 __ADD(XFRM_MODE_BEET, beet),
118 char* xfrmnl_user_tmpl_mode2str(
int mode,
char *buf,
size_t len)
120 return __type2str (mode, buf, len, tmpl_modes, ARRAY_SIZE(tmpl_modes));
123 int xfrmnl_user_tmpl_str2mode(
const char *name)
125 return __str2type (name, tmpl_modes, ARRAY_SIZE(tmpl_modes));
146 (a->id.spi != b->id.spi) ||
147 (a->id.proto && (a->id.proto != b->id.proto)) ||
149 (a->family != b->family) ||
150 (a->reqid != b->reqid) ||
151 (a->mode != b->mode) ||
152 (a->share != b->share) ||
153 (a->aalgos != b->aalgos) ||
154 (a->ealgos != b->ealgos) ||
155 (a->calgos != b->calgos))
162 void xfrmnl_user_tmpl_dump(
struct xfrmnl_user_tmpl* tmpl,
struct nl_dump_params *p)
164 char dst[INET6_ADDRSTRLEN+5], src[INET6_ADDRSTRLEN+5];
167 nl_dump_line(p,
"\t\tsrc %s dst %s family: %s \n",
170 nl_af2str (tmpl->family, buf, 128));
171 nl_dump_line (p,
"\t\tprotocol: %s spi: 0x%x reqid: %u mode: %s\n",
172 nl_ip_proto2str (tmpl->id.proto, buf,
sizeof(buf)),
173 tmpl->id.spi, tmpl->reqid,
174 xfrmnl_user_tmpl_mode2str (tmpl->mode, buf, 128));
175 nl_dump_line (p,
"\t\tAuth Algo: 0x%x Crypto Algo: 0x%x Compr Algo: 0x%x\n",
176 tmpl->aalgos, tmpl->ealgos, tmpl->calgos);
187 struct nl_addr* xfrmnl_user_tmpl_get_daddr (
struct xfrmnl_user_tmpl* utmpl)
189 return utmpl->id.daddr;
192 int xfrmnl_user_tmpl_set_daddr (
struct xfrmnl_user_tmpl* utmpl,
struct nl_addr* addr)
198 utmpl->id.daddr = addr;
203 int xfrmnl_user_tmpl_get_spi (
struct xfrmnl_user_tmpl* utmpl)
205 return utmpl->id.spi;
208 int xfrmnl_user_tmpl_set_spi (
struct xfrmnl_user_tmpl* utmpl,
unsigned int spi)
215 int xfrmnl_user_tmpl_get_proto (
struct xfrmnl_user_tmpl* utmpl)
217 return utmpl->id.proto;
220 int xfrmnl_user_tmpl_set_proto (
struct xfrmnl_user_tmpl* utmpl,
unsigned int protocol)
222 utmpl->id.proto = protocol;
227 int xfrmnl_user_tmpl_get_family(
struct xfrmnl_user_tmpl *utmpl)
229 return utmpl->family;
232 int xfrmnl_user_tmpl_set_family(
struct xfrmnl_user_tmpl *utmpl,
int family)
234 utmpl->family = family;
239 struct nl_addr* xfrmnl_user_tmpl_get_saddr (
struct xfrmnl_user_tmpl* utmpl)
244 int xfrmnl_user_tmpl_set_saddr (
struct xfrmnl_user_tmpl* utmpl,
struct nl_addr* addr)
255 int xfrmnl_user_tmpl_get_reqid (
struct xfrmnl_user_tmpl* utmpl)
260 int xfrmnl_user_tmpl_set_reqid (
struct xfrmnl_user_tmpl* utmpl,
unsigned int reqid)
262 utmpl->reqid = reqid;
267 int xfrmnl_user_tmpl_get_mode (
struct xfrmnl_user_tmpl* utmpl)
272 int xfrmnl_user_tmpl_set_mode (
struct xfrmnl_user_tmpl* utmpl,
unsigned int mode)
279 int xfrmnl_user_tmpl_get_share (
struct xfrmnl_user_tmpl* utmpl)
284 int xfrmnl_user_tmpl_set_share (
struct xfrmnl_user_tmpl* utmpl,
unsigned int share)
286 utmpl->share = share;
291 int xfrmnl_user_tmpl_get_optional (
struct xfrmnl_user_tmpl* utmpl)
293 return utmpl->optional;
296 int xfrmnl_user_tmpl_set_optional (
struct xfrmnl_user_tmpl* utmpl,
unsigned int optional)
298 utmpl->optional = optional;
303 int xfrmnl_user_tmpl_get_aalgos (
struct xfrmnl_user_tmpl* utmpl)
305 return utmpl->aalgos;
308 int xfrmnl_user_tmpl_set_aalgos (
struct xfrmnl_user_tmpl* utmpl,
unsigned int aalgos)
310 utmpl->aalgos = aalgos;
315 int xfrmnl_user_tmpl_get_ealgos (
struct xfrmnl_user_tmpl* utmpl)
317 return utmpl->ealgos;
320 int xfrmnl_user_tmpl_set_ealgos (
struct xfrmnl_user_tmpl* utmpl,
unsigned int ealgos)
322 utmpl->ealgos = ealgos;
327 int xfrmnl_user_tmpl_get_calgos (
struct xfrmnl_user_tmpl* utmpl)
329 return utmpl->calgos;
332 int xfrmnl_user_tmpl_set_calgos (
struct xfrmnl_user_tmpl* utmpl,
unsigned int calgos)
334 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.