Commit f6fd52e6 authored by Jamal Hadi Salim's avatar Jamal Hadi Salim Committed by Stephen Hemminger

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:
parent ee675e87
...@@ -629,9 +629,48 @@ static void xfrm_tmpl_print(struct xfrm_user_tmpl *tmpls, int len, ...@@ -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, void xfrm_xfrma_print(struct rtattr *tb[], __u16 family,
FILE *fp, const char *prefix) 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]) { if (tb[XFRMA_ALG_AUTH]) {
struct rtattr *rta = tb[XFRMA_ALG_AUTH]; struct rtattr *rta = tb[XFRMA_ALG_AUTH];
xfrm_algo_print((struct xfrm_algo *) RTA_DATA(rta), xfrm_algo_print((struct xfrm_algo *) RTA_DATA(rta),
...@@ -740,6 +779,7 @@ void xfrm_xfrma_print(struct rtattr *tb[], __u16 family, ...@@ -740,6 +779,7 @@ void xfrm_xfrma_print(struct rtattr *tb[], __u16 family,
fprintf(fp, "%s", strxf_time(lastused)); fprintf(fp, "%s", strxf_time(lastused));
fprintf(fp, "%s", _SL_); fprintf(fp, "%s", _SL_);
} }
} }
static int xfrm_selector_iszero(struct xfrm_selector *s) static int xfrm_selector_iszero(struct xfrm_selector *s)
......
...@@ -121,6 +121,7 @@ int xfrm_xfrmproto_is_ipsec(__u8 proto); ...@@ -121,6 +121,7 @@ int xfrm_xfrmproto_is_ipsec(__u8 proto);
int xfrm_xfrmproto_is_ro(__u8 proto); int xfrm_xfrmproto_is_ro(__u8 proto);
int xfrm_xfrmproto_getbyname(char *name); int xfrm_xfrmproto_getbyname(char *name);
int xfrm_algotype_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_xfrmproto(__u8 proto);
const char *strxf_algotype(int type); const char *strxf_algotype(int type);
const char *strxf_mask8(__u8 mask); const char *strxf_mask8(__u8 mask);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment