49 #include <netlink/xfrm/template.h> 50 #include <netlink-private/netlink.h> 52 void xfrmnl_user_tmpl_free(
struct xfrmnl_user_tmpl* utmpl)
73 struct xfrmnl_user_tmpl* utmpl;
75 utmpl = calloc(1,
sizeof(
struct xfrmnl_user_tmpl));
79 nl_init_list_head(&utmpl->utmpl_list);
92 struct xfrmnl_user_tmpl*
new;
98 memcpy(
new, utmpl,
sizeof(
struct xfrmnl_user_tmpl));
111 static const struct trans_tbl tmpl_modes[] = {
112 __ADD(XFRM_MODE_TRANSPORT, transport),
113 __ADD(XFRM_MODE_TUNNEL, tunnel),
114 __ADD(XFRM_MODE_ROUTEOPTIMIZATION, route optimization),
115 __ADD(XFRM_MODE_IN_TRIGGER, in trigger),
116 __ADD(XFRM_MODE_BEET, beet),
119 char* xfrmnl_user_tmpl_mode2str(
int mode,
char *buf,
size_t len)
121 return __type2str (mode, buf, len, tmpl_modes, ARRAY_SIZE(tmpl_modes));
124 int xfrmnl_user_tmpl_str2mode(
const char *name)
126 return __str2type (name, tmpl_modes, ARRAY_SIZE(tmpl_modes));
147 (a->id.spi != b->id.spi) ||
148 (a->id.proto && (a->id.proto != b->id.proto)) ||
150 (a->family != b->family) ||
151 (a->reqid != b->reqid) ||
152 (a->mode != b->mode) ||
153 (a->share != b->share) ||
154 (a->aalgos != b->aalgos) ||
155 (a->ealgos != b->ealgos) ||
156 (a->calgos != b->calgos))
163 void xfrmnl_user_tmpl_dump(
struct xfrmnl_user_tmpl* tmpl,
struct nl_dump_params *p)
165 char dst[INET6_ADDRSTRLEN+5], src[INET6_ADDRSTRLEN+5];
168 nl_dump_line(p,
"\t\tsrc %s dst %s family: %s \n",
171 nl_af2str (tmpl->family, buf, 128));
172 nl_dump_line (p,
"\t\tprotocol: %s spi: 0x%x reqid: %u mode: %s\n",
173 nl_ip_proto2str (tmpl->id.proto, buf,
sizeof(buf)),
174 tmpl->id.spi, tmpl->reqid,
175 xfrmnl_user_tmpl_mode2str (tmpl->mode, buf, 128));
176 nl_dump_line (p,
"\t\tAuth Algo: 0x%x Crypto Algo: 0x%x Compr Algo: 0x%x\n",
177 tmpl->aalgos, tmpl->ealgos, tmpl->calgos);
188 struct nl_addr* xfrmnl_user_tmpl_get_daddr (
struct xfrmnl_user_tmpl* utmpl)
190 return utmpl->id.daddr;
193 int xfrmnl_user_tmpl_set_daddr (
struct xfrmnl_user_tmpl* utmpl,
struct nl_addr* addr)
199 utmpl->id.daddr = addr;
204 int xfrmnl_user_tmpl_get_spi (
struct xfrmnl_user_tmpl* utmpl)
206 return utmpl->id.spi;
209 int xfrmnl_user_tmpl_set_spi (
struct xfrmnl_user_tmpl* utmpl,
unsigned int spi)
216 int xfrmnl_user_tmpl_get_proto (
struct xfrmnl_user_tmpl* utmpl)
218 return utmpl->id.proto;
221 int xfrmnl_user_tmpl_set_proto (
struct xfrmnl_user_tmpl* utmpl,
unsigned int protocol)
223 utmpl->id.proto = protocol;
228 int xfrmnl_user_tmpl_get_family(
struct xfrmnl_user_tmpl *utmpl)
230 return utmpl->family;
233 int xfrmnl_user_tmpl_set_family(
struct xfrmnl_user_tmpl *utmpl,
unsigned int family)
235 utmpl->family = family;
240 struct nl_addr* xfrmnl_user_tmpl_get_saddr (
struct xfrmnl_user_tmpl* utmpl)
245 int xfrmnl_user_tmpl_set_saddr (
struct xfrmnl_user_tmpl* utmpl,
struct nl_addr* addr)
256 int xfrmnl_user_tmpl_get_reqid (
struct xfrmnl_user_tmpl* utmpl)
261 int xfrmnl_user_tmpl_set_reqid (
struct xfrmnl_user_tmpl* utmpl,
unsigned int reqid)
263 utmpl->reqid = reqid;
268 int xfrmnl_user_tmpl_get_mode (
struct xfrmnl_user_tmpl* utmpl)
273 int xfrmnl_user_tmpl_set_mode (
struct xfrmnl_user_tmpl* utmpl,
unsigned int mode)
280 int xfrmnl_user_tmpl_get_share (
struct xfrmnl_user_tmpl* utmpl)
285 int xfrmnl_user_tmpl_set_share (
struct xfrmnl_user_tmpl* utmpl,
unsigned int share)
287 utmpl->share = share;
292 int xfrmnl_user_tmpl_get_optional (
struct xfrmnl_user_tmpl* utmpl)
294 return utmpl->optional;
297 int xfrmnl_user_tmpl_set_optional (
struct xfrmnl_user_tmpl* utmpl,
unsigned int optional)
299 utmpl->optional = optional;
304 int xfrmnl_user_tmpl_get_aalgos (
struct xfrmnl_user_tmpl* utmpl)
306 return utmpl->aalgos;
309 int xfrmnl_user_tmpl_set_aalgos (
struct xfrmnl_user_tmpl* utmpl,
unsigned int aalgos)
311 utmpl->aalgos = aalgos;
316 int xfrmnl_user_tmpl_get_ealgos (
struct xfrmnl_user_tmpl* utmpl)
318 return utmpl->ealgos;
321 int xfrmnl_user_tmpl_set_ealgos (
struct xfrmnl_user_tmpl* utmpl,
unsigned int ealgos)
323 utmpl->ealgos = ealgos;
328 int xfrmnl_user_tmpl_get_calgos (
struct xfrmnl_user_tmpl* utmpl)
330 return utmpl->calgos;
333 int xfrmnl_user_tmpl_set_calgos (
struct xfrmnl_user_tmpl* utmpl,
unsigned int calgos)
335 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.