From: Masahide NAKAMURA <nakam@linux-ipv6.org>
To: Stephen Hemminger <shemminger@osdl.org>
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
netdev@oss.sgi.com, nakam@linux-ipv6.org
Subject: [PATCH 2/3] iproute2 and xfrm
Date: Thu, 15 Jul 2004 15:02:19 +0900 [thread overview]
Message-ID: <20040715150219.24a498a6@localhost> (raw)
In-Reply-To: <20040714174233.2fc7dbc2@localhost>
Hello,
This patch is for iproute2.
Please check comment in a ChangeSet below.
Regards,
ChangeSet@1.56, 2004-07-12 20:00:04+09:00, nakam@linux-ipv6.org
fix output format to follow command line option style when using
without "-s" option.
diff -Nru a/ip/ipxfrm.c b/ip/ipxfrm.c
--- a/ip/ipxfrm.c 2004-07-14 16:35:49 +09:00
+++ b/ip/ipxfrm.c 2004-07-14 16:35:49 +09:00
@@ -105,11 +105,11 @@
fprintf(fp, prefix);
memset(abuf, '\0', sizeof(abuf));
- fprintf(fp, "%s ", rt_addr_n2a(family, sizeof(*saddr),
- saddr, abuf, sizeof(abuf)));
+ fprintf(fp, "src %s ", rt_addr_n2a(family, sizeof(*saddr),
+ saddr, abuf, sizeof(abuf)));
memset(abuf, '\0', sizeof(abuf));
- fprintf(fp, "%s\n", rt_addr_n2a(family, sizeof(id->daddr),
- &id->daddr, abuf, sizeof(abuf)));
+ fprintf(fp, "dst %s\n", rt_addr_n2a(family, sizeof(id->daddr),
+ &id->daddr, abuf, sizeof(abuf)));
if (prefix)
fprintf(fp, prefix);
@@ -122,30 +122,20 @@
sprintf(pbuf, "%d", id->proto);
p = pbuf;
}
+ fprintf(fp, "proto %s ", p);
- switch (id->proto) {
- case IPPROTO_ESP:
- case IPPROTO_AH:
- case IPPROTO_COMP:
- fprintf(fp, "%s ", p);
- break;
- default:
- fprintf(fp, "unspec(%s)", p);
- break;
- }
-
- switch (id->proto) {
- case IPPROTO_ESP:
- case IPPROTO_AH:
- case IPPROTO_COMP:
- default:
- spi = ntohl(id->spi);
- fprintf(fp, "spi %d(0x%08x) ", spi, spi);
- break;
- }
+ spi = ntohl(id->spi);
+ fprintf(fp, "spi %u", spi);
+ if (show_stats > 0)
+ fprintf(fp, "(0x%08x)", spi);
+ fprintf(fp, " ");
+
+ fprintf(fp, "reqid %u", reqid);
+ if (show_stats > 0)
+ fprintf(fp, "(0x%08x)", reqid);
+ fprintf(fp, " ");
- fprintf(fp, "reqid %d ", reqid);
- fprintf(fp, "%s\n", (mode ? "tunnel" : "transport"));
+ fprintf(fp, "mode %s\n", (mode ? "tunnel" : "transport"));
}
static const char *strxf_limit(__u64 limit)
@@ -279,16 +269,14 @@
fprintf(fp, prefix);
memset(abuf, '\0', sizeof(abuf));
- fprintf(fp, "%s/%d[%u]", rt_addr_n2a(f, sizeof(sel->saddr),
- &sel->saddr,
- abuf, sizeof(abuf)),
- sel->prefixlen_s, sel->sport);
+ fprintf(fp, "src %s/%d ", rt_addr_n2a(f, sizeof(sel->saddr),
+ &sel->saddr, abuf, sizeof(abuf)),
+ sel->prefixlen_s);
memset(abuf, '\0', sizeof(abuf));
- fprintf(fp, " %s/%d[%u]", rt_addr_n2a(f, sizeof(sel->daddr),
- &sel->daddr,
- abuf, sizeof(abuf)),
- sel->prefixlen_d, sel->dport);
+ fprintf(fp, "dst %s/%d", rt_addr_n2a(f, sizeof(sel->daddr),
+ &sel->daddr, abuf, sizeof(abuf)),
+ sel->prefixlen_d);
fprintf(fp, "\n");
@@ -296,7 +284,8 @@
fprintf(fp, prefix);
fprintf(fp, "\t");
- fprintf(fp, "upspec %u ", sel->proto);
+ fprintf(fp, "upspec proto %u ", sel->proto);
+ fprintf(fp, "sport %u dport %u ", sel->sport, sel->dport);
if (sel->ifindex > 0) {
char buf[IF_NAMESIZE];
@@ -304,10 +293,10 @@
memset(buf, '\0', sizeof(buf));
if_indextoname(sel->ifindex, buf);
fprintf(fp, "dev %s ", buf);
- } else
- fprintf(fp, "dev (none) ");
+ }
- fprintf(fp, "uid %u", sel->user);
+ if (show_stats > 0)
+ fprintf(fp, "uid %u", sel->user);
fprintf(fp, "\n");
}
@@ -367,35 +356,41 @@
__u16 family, FILE *fp, const char *prefix)
{
char buf[32];
- const char *p = NULL;
int i;
- if (prefix) {
- strcpy(buf, prefix);
- strcat(buf, " ");
- } else
- strcpy(buf, " ");
- p = buf;
-
for (i = 0; i < ntmpls; i++) {
struct xfrm_user_tmpl *tmpl = &tmpls[i];
if (prefix)
fprintf(fp, prefix);
- fprintf(fp, "tmpl-%d:\n", i+1);
+
+ fprintf(fp, "tmpl");
xfrm_id_info_print(&tmpl->saddr, &tmpl->id, tmpl->mode,
- tmpl->reqid, family, fp, p);
+ tmpl->reqid, family, fp, prefix);
- fprintf(fp, p);
+ fprintf(fp, prefix);
fprintf(fp, "\t");
- fprintf(fp, "level %s ", ((tmpl->optional == 0) ? "required" :
- (tmpl->optional == 1) ? "use" :
- "unknown-level"));
- fprintf(fp, "share %s ", strxf_share(tmpl->share));
- fprintf(fp, "algo-mask:");
- fprintf(fp, "E=%s, ", strxf_mask(tmpl->ealgos));
- fprintf(fp, "A=%s, ", strxf_mask(tmpl->aalgos));
- fprintf(fp, "C=%s", strxf_mask(tmpl->calgos));
+ fprintf(fp, "level ");
+ switch (tmpl->optional) {
+ case 0:
+ fprintf(fp, "required");
+ break;
+ case 1:
+ fprintf(fp, "use");
+ break;
+ default:
+ fprintf(fp, "%d", tmpl->optional);
+ break;
+ }
+ fprintf(fp, " ");
+
+ if (show_stats > 0) {
+ fprintf(fp, "share %s ", strxf_share(tmpl->share));
+ fprintf(fp, "algo-mask:");
+ fprintf(fp, "E=%s, ", strxf_mask(tmpl->ealgos));
+ fprintf(fp, "A=%s, ", strxf_mask(tmpl->aalgos));
+ fprintf(fp, "C=%s", strxf_mask(tmpl->calgos));
+ }
fprintf(fp, "\n");
}
}
@@ -413,17 +408,17 @@
case XFRMA_ALG_CRYPT:
if (prefix)
fprintf(fp, prefix);
- xfrm_algo_print((struct xfrm_algo *)data, fp, "E:");
+ xfrm_algo_print((struct xfrm_algo *)data, fp, "algo E ");
break;
case XFRMA_ALG_AUTH:
if (prefix)
fprintf(fp, prefix);
- xfrm_algo_print((struct xfrm_algo *)data, fp, "A:");
+ xfrm_algo_print((struct xfrm_algo *)data, fp, "algo A ");
break;
case XFRMA_ALG_COMP:
if (prefix)
fprintf(fp, prefix);
- xfrm_algo_print((struct xfrm_algo *)data, fp, "C:");
+ xfrm_algo_print((struct xfrm_algo *)data, fp, "algo C ");
break;
case XFRMA_ENCAP:
if (prefix)
diff -Nru a/ip/xfrm_policy.c b/ip/xfrm_policy.c
--- a/ip/xfrm_policy.c 2004-07-14 16:35:49 +09:00
+++ b/ip/xfrm_policy.c 2004-07-14 16:35:49 +09:00
@@ -357,20 +357,47 @@
if (n->nlmsg_type == XFRM_MSG_DELPOLICY)
fprintf(fp, "Deleted ");
+ fprintf(fp, "sel ");
xfrm_selector_print(&xpinfo->sel, preferred_family, fp, NULL);
fprintf(fp, "\t");
- fprintf(fp, "%s ", (xpinfo->dir == XFRM_POLICY_IN ? "in " :
- xpinfo->dir == XFRM_POLICY_OUT ? "out" :
- xpinfo->dir == XFRM_POLICY_FWD ? "fwd" :
- "unknown-dir"));
- fprintf(fp, "%s ", (xpinfo->action == XFRM_POLICY_ALLOW ? "allow" :
- xpinfo->action == XFRM_POLICY_BLOCK ? "block" :
- "unknown-action"));
+ fprintf(fp, "dir ");
+ switch (xpinfo->dir) {
+ case XFRM_POLICY_IN:
+ fprintf(fp, "in");
+ break;
+ case XFRM_POLICY_OUT:
+ fprintf(fp, "out");
+ break;
+ case XFRM_POLICY_FWD:
+ fprintf(fp, "fwd");
+ break;
+ default:
+ fprintf(fp, "%d", xpinfo->dir);
+ break;
+ }
+ fprintf(fp, " ");
+
+ fprintf(fp, "action ");
+ switch (xpinfo->action) {
+ case XFRM_POLICY_ALLOW:
+ fprintf(fp, "allow");
+ break;
+ case XFRM_POLICY_BLOCK:
+ fprintf(fp, "block");
+ break;
+ default:
+ fprintf(fp, "%d", xpinfo->action);
+ break;
+ }
+ fprintf(fp, " ");
+
fprintf(fp, "index %u ", xpinfo->index);
fprintf(fp, "priority %u ", xpinfo->priority);
- fprintf(fp, "share %s ", strxf_share(xpinfo->share));
- fprintf(fp, "flags 0x%s", strxf_flags(xpinfo->flags));
+ if (show_stats > 0) {
+ fprintf(fp, "share %s ", strxf_share(xpinfo->share));
+ fprintf(fp, "flags 0x%s", strxf_flags(xpinfo->flags));
+ }
fprintf(fp, "\n");
if (show_stats > 0)
diff -Nru a/ip/xfrm_state.c b/ip/xfrm_state.c
--- a/ip/xfrm_state.c 2004-07-14 16:35:49 +09:00
+++ b/ip/xfrm_state.c 2004-07-14 16:35:49 +09:00
@@ -142,11 +142,20 @@
{
int argc = *argcp;
char **argv = *argvp;
+ int len = strlen(*argv);
- if (strcmp(*argv, "noecn") == 0)
- *flags |= XFRM_STATE_NOECN;
- else
- invarg("\"FLAG\" is invalid", *argv);
+ if (len > 2 && strncmp(*argv, "0x", 2) == 0) {
+ __u8 val = 0;
+
+ if (get_u8(&val, *argv, 16))
+ invarg("\"FLAG\" is invalid", *argv);
+ *flags = val;
+ } else {
+ if (strcmp(*argv, "noecn") == 0)
+ *flags |= XFRM_STATE_NOECN;
+ else
+ invarg("\"FLAG\" is invalid", *argv);
+ }
filter.state_flags_mask = XFRM_FILTER_MASK_FULL;
@@ -357,22 +366,26 @@
xfrm_id_info_print(&xsinfo->saddr, &xsinfo->id, xsinfo->mode,
xsinfo->reqid, xsinfo->family, fp, NULL);
+ fprintf(fp, "\t");
if (show_stats > 0) {
- fprintf(fp, "\t");
fprintf(fp, "seq 0x%08u ", xsinfo->seq);
fprintf(fp, "replay-window %d ", xsinfo->replay_window);
- fprintf(fp, "flags ");
- if (xsinfo->flags & XFRM_STATE_NOECN)
- fprintf(fp, "noecn ");
- fprintf(fp, "(0x%s)", strxf_flags(xsinfo->flags));
-
- fprintf(fp, "\n");
}
+ fprintf(fp, "flag 0x%s", strxf_flags(xsinfo->flags));
+ if (show_stats > 0) {
+ if (xsinfo->flags) {
+ fprintf(fp, "(");
+ if (xsinfo->flags & XFRM_STATE_NOECN)
+ fprintf(fp, "noecn");
+ fprintf(fp, ")");
+ }
+ }
+ fprintf(fp, "\n");
xfrm_xfrma_print(tb, ntb, xsinfo->family, fp, "\t");
if (show_stats > 0) {
- fprintf(fp, "\tsel:\n");
+ fprintf(fp, "\tsel\n");
xfrm_selector_print(&xsinfo->sel, xsinfo->family, fp, "\t ");
}
--
Masahide NAKAMURA
next prev parent reply other threads:[~2004-07-15 6:02 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-03 9:46 [PATCH] Add nl_open to libnetlink Herbert Xu
2004-07-05 7:05 ` Masahide NAKAMURA
2004-07-05 8:07 ` Herbert Xu
2004-07-06 21:05 ` Stephen Hemminger
2004-07-07 4:09 ` Masahide NAKAMURA
2004-07-07 5:05 ` Masahide NAKAMURA
2004-07-07 6:56 ` Masahide NAKAMURA
2004-07-07 11:03 ` Herbert Xu
2004-07-09 3:51 ` Masahide NAKAMURA
2004-07-15 6:02 ` [PATCH 1/3] iproute2 and xfrm Masahide NAKAMURA
2004-07-16 22:22 ` Stephen Hemminger
[not found] ` <20040714174233.2fc7dbc2@localhost>
2004-07-15 6:02 ` Masahide NAKAMURA [this message]
2004-07-16 23:05 ` [PATCH 2/3] " Herbert Xu
[not found] ` <20040714174637.0ce79ae1@localhost>
2004-07-15 6:02 ` [PATCH 3/3] " Masahide NAKAMURA
2004-07-07 18:08 ` [PATCH] Add nl_open to libnetlink Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040715150219.24a498a6@localhost \
--to=nakam@linux-ipv6.org \
--cc=herbert@gondor.apana.org.au \
--cc=netdev@oss.sgi.com \
--cc=shemminger@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.