xfrm: Introduce xfrm by mark
This patch carries basic infrastructure. You need to make sure that the proper include/linux/xfrm.h is included for it to compile. Example:
This commit is contained in:
parent
ee675e8714
commit
f6fd52e626
40
ip/ipxfrm.c
40
ip/ipxfrm.c
|
|
@ -629,9 +629,48 @@ static void xfrm_tmpl_print(struct xfrm_user_tmpl *tmpls, int len,
|
|||
}
|
||||
}
|
||||
|
||||
int xfrm_parse_mark(struct xfrm_mark *mark, int *argcp, char ***argvp)
|
||||
{
|
||||
int argc = *argcp;
|
||||
char **argv = *argvp;
|
||||
|
||||
NEXT_ARG();
|
||||
if (get_u32(&mark->v, *argv, 0)) {
|
||||
invarg("Illegal \"mark\" value\n", *argv);
|
||||
}
|
||||
if (argc > 1)
|
||||
NEXT_ARG();
|
||||
else { /* last entry on parse line */
|
||||
mark->m = 0xffffffff;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (strcmp(*argv, "mask") == 0) {
|
||||
NEXT_ARG();
|
||||
if (get_u32(&mark->m, *argv, 0)) {
|
||||
invarg("Illegal \"mark\" mask\n", *argv);
|
||||
}
|
||||
} else {
|
||||
mark->m = 0xffffffff;
|
||||
PREV_ARG();
|
||||
}
|
||||
|
||||
done:
|
||||
*argcp = argc;
|
||||
*argvp = argv;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void xfrm_xfrma_print(struct rtattr *tb[], __u16 family,
|
||||
FILE *fp, const char *prefix)
|
||||
{
|
||||
if (tb[XFRMA_MARK]) {
|
||||
struct rtattr *rta = tb[XFRMA_MARK];
|
||||
struct xfrm_mark *m = (struct xfrm_mark *) RTA_DATA(rta);
|
||||
fprintf(fp, "\tmark %d/0x%x\n", m->v, m->m);
|
||||
}
|
||||
|
||||
if (tb[XFRMA_ALG_AUTH]) {
|
||||
struct rtattr *rta = tb[XFRMA_ALG_AUTH];
|
||||
xfrm_algo_print((struct xfrm_algo *) RTA_DATA(rta),
|
||||
|
|
@ -740,6 +779,7 @@ void xfrm_xfrma_print(struct rtattr *tb[], __u16 family,
|
|||
fprintf(fp, "%s", strxf_time(lastused));
|
||||
fprintf(fp, "%s", _SL_);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static int xfrm_selector_iszero(struct xfrm_selector *s)
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ int xfrm_xfrmproto_is_ipsec(__u8 proto);
|
|||
int xfrm_xfrmproto_is_ro(__u8 proto);
|
||||
int xfrm_xfrmproto_getbyname(char *name);
|
||||
int xfrm_algotype_getbyname(char *name);
|
||||
int xfrm_parse_mark(struct xfrm_mark *mark, int *argcp, char ***argvp);
|
||||
const char *strxf_xfrmproto(__u8 proto);
|
||||
const char *strxf_algotype(int type);
|
||||
const char *strxf_mask8(__u8 mask);
|
||||
|
|
|
|||
Loading…
Reference in New Issue