Hello community, here is the log from the commit of package iproute2 for openSUSE:Factory checked in at Thu Mar 24 09:37:09 CET 2011.
-------- --- iproute2/iproute2.changes 2011-01-12 17:03:48.000000000 +0100 +++ /mounts/work_src_done/STABLE/iproute2/iproute2.changes 2011-03-23 19:59:21.000000000 +0100 @@ -1,0 +2,21 @@ +Wed Mar 23 18:57:20 UTC 2011 - [email protected] + +Remove unneeded patches: +* iproute2-warnings.diff bnc#34714 + Warnings no longer exist +* iproute2-iptunnel-fclose.diff + Process is dying no need to close file pointers +* iproute2-ss-pclose.diff + Process is dying no need to close file pointers +* iproute2-flushcheckuid.diff + Fixed upstream +* iproute2-skbedit-memset.diff + Fixed upstream 46a6573259f46f86eb0048a2c805b24ff4183fa6 + +------------------------------------------------------------------- +Tue Mar 22 08:57:44 CET 2011 - [email protected] + +- Update to 2.6.38, fix for options process with ipt (bnc #679172) +- tidy up the package, spec file names, patch names, etc + +------------------------------------------------------------------- calling whatdependson for head-i586 Old: ---- iproute2-2.6.29-1-HZ.diff iproute2-2.6.29-1-flushcheckuid.diff iproute2-2.6.29-1-iptunnel-fclose.diff iproute2-2.6.29-1-libdir-1.diff iproute2-2.6.29-1-memleak.diff iproute2-2.6.29-1-pdfdoc.diff iproute2-2.6.29-1-skbedit-memset.diff iproute2-2.6.29-1-ss-pclose.diff iproute2-2.6.29-1-warnings.diff iproute2-2.6.37-rtt-metrics-units.diff iproute2-2.6.37.tar.bz2 New: ---- iproute2-2.6.38.tar.bz2 iproute2-HZ.diff iproute2-libdir-1.diff iproute2-memleak.diff iproute2-pdfdoc.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ iproute2.spec ++++++ --- /var/tmp/diff_new_pack.JeKh2A/_old 2011-03-24 09:35:29.000000000 +0100 +++ /var/tmp/diff_new_pack.JeKh2A/_new 2011-03-24 09:35:29.000000000 +0100 @@ -1,5 +1,5 @@ # -# spec file for package iproute2 (Version 2.6.37) +# spec file for package iproute2 # # Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -24,22 +24,16 @@ License: GPLv2+ Group: Productivity/Networking/Routing Provides: iproute -Version: 2.6.37 +Version: 2.6.38 Release: 1 -%define rversion 2.6.37 +%define rversion 2.6.38 Summary: Advanced Routing -Url: http://developer.osdl.org/dev/iproute2/ +Url: http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2 Source0: %name-%rversion.tar.bz2 -Patch0: %name-2.6.29-1-libdir-1.diff -Patch1: %name-2.6.29-1-HZ.diff -Patch2: %name-2.6.29-1-pdfdoc.diff -Patch5: %name-2.6.29-1-flushcheckuid.diff -Patch7: %name-2.6.29-1-warnings.diff -Patch8: %name-2.6.29-1-skbedit-memset.diff -Patch9: %name-2.6.29-1-iptunnel-fclose.diff -Patch10: %name-2.6.29-1-ss-pclose.diff -Patch13: %name-2.6.29-1-memleak.diff -Patch14: %name-2.6.37-rtt-metrics-units.diff +Patch0: %name-libdir-1.diff +Patch1: %name-HZ.diff +Patch2: %name-pdfdoc.diff +Patch3: %name-memleak.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -79,13 +73,7 @@ %patch0 %patch1 %patch2 -%patch5 -%patch7 -%patch8 -%patch9 -%patch10 -%patch13 -%patch14 -p1 +%patch3 find . -name *.orig -print0 | xargs -r0 rm -v %build ++++++ iproute2-2.6.37.tar.bz2 -> iproute2-2.6.38.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/include/SNAPSHOT.h new/iproute2-2.6.38/include/SNAPSHOT.h --- old/iproute2-2.6.37/include/SNAPSHOT.h 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/include/SNAPSHOT.h 2011-03-17 18:05:47.000000000 +0100 @@ -1 +1 @@ -static const char SNAPSHOT[] = "110107"; +static const char SNAPSHOT[] = "110317"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/include/linux/if_ether.h new/iproute2-2.6.38/include/linux/if_ether.h --- old/iproute2-2.6.37/include/linux/if_ether.h 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/include/linux/if_ether.h 2011-03-17 18:05:47.000000000 +0100 @@ -72,6 +72,7 @@ #define ETH_P_MPLS_UC 0x8847 /* MPLS Unicast traffic */ #define ETH_P_MPLS_MC 0x8848 /* MPLS Multicast traffic */ #define ETH_P_ATMMPOA 0x884c /* MultiProtocol Over ATM */ +#define ETH_P_LINK_CTL 0x886c /* HPNA, wlan link local tunnel */ #define ETH_P_ATMFATE 0x8884 /* Frame-based ATM Transport * over Ethernet */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/include/linux/if_link.h new/iproute2-2.6.38/include/linux/if_link.h --- old/iproute2-2.6.37/include/linux/if_link.h 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/include/linux/if_link.h 2011-03-17 18:05:47.000000000 +0100 @@ -80,6 +80,24 @@ __u8 port; }; +/* + * IFLA_AF_SPEC + * Contains nested attributes for address family specific attributes. + * Each address family may create a attribute with the address family + * number as type and create its own attribute structure in it. + * + * Example: + * [IFLA_AF_SPEC] = { + * [AF_INET] = { + * [IFLA_INET_CONF] = ..., + * }, + * [AF_INET6] = { + * [IFLA_INET6_FLAGS] = ..., + * [IFLA_INET6_CONF] = ..., + * } + * } + */ + enum { IFLA_UNSPEC, IFLA_ADDRESS, @@ -116,6 +134,7 @@ IFLA_STATS64, IFLA_VF_PORTS, IFLA_PORT_SELF, + IFLA_AF_SPEC, __IFLA_MAX }; @@ -126,6 +145,14 @@ #define IFLA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg)))) #define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg)) +enum { + IFLA_INET_UNSPEC, + IFLA_INET_CONF, + __IFLA_INET_MAX, +}; + +#define IFLA_INET_MAX (__IFLA_INET_MAX - 1) + /* ifi_flags. IFF_* flags. @@ -230,6 +257,7 @@ MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */ MACVLAN_MODE_VEPA = 2, /* talk to other ports through ext bridge */ MACVLAN_MODE_BRIDGE = 4, /* talk to bridge ports directly */ + MACVLAN_MODE_PASSTHRU = 8,/* take over the underlying device */ }; /* SR-IOV virtual function management section */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/include/linux/netfilter.h new/iproute2-2.6.38/include/linux/netfilter.h --- old/iproute2-2.6.37/include/linux/netfilter.h 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/include/linux/netfilter.h 2011-03-17 18:05:47.000000000 +0100 @@ -23,6 +23,8 @@ #define NF_QUEUE_NR(x) ((((x) << NF_VERDICT_BITS) & NF_VERDICT_QMASK) | NF_QUEUE) +#define NF_DROP_ERR(x) (((-x) << NF_VERDICT_BITS) | NF_DROP) + /* only for userspace compatibility */ /* Generic cache responses from hook functions. <= 0x2000 is used for protocol-flags. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/include/linux/xfrm.h new/iproute2-2.6.38/include/linux/xfrm.h --- old/iproute2-2.6.37/include/linux/xfrm.h 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/include/linux/xfrm.h 2011-03-17 18:05:47.000000000 +0100 @@ -283,6 +283,7 @@ XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */ XFRMA_ALG_AUTH_TRUNC, /* struct xfrm_algo_auth */ XFRMA_MARK, /* struct xfrm_mark */ + XFRMA_TFCPAD, /* __u32 */ __XFRMA_MAX #define XFRMA_MAX (__XFRMA_MAX - 1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/include/utils.h new/iproute2-2.6.38/include/utils.h --- old/iproute2-2.6.37/include/utils.h 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/include/utils.h 2011-03-17 18:05:47.000000000 +0100 @@ -79,7 +79,7 @@ extern int get_integer(int *val, const char *arg, int base); extern int get_unsigned(unsigned *val, const char *arg, int base); -extern int get_jiffies(unsigned *val, const char *arg, int base, int *raw); +extern int get_time_rtt(unsigned *val, const char *arg, int *raw); #define get_byte get_u8 #define get_ushort get_u16 #define get_short get_s16 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/ip/iplink_macvlan.c new/iproute2-2.6.38/ip/iplink_macvlan.c --- old/iproute2-2.6.37/ip/iplink_macvlan.c 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/ip/iplink_macvlan.c 2011-03-17 18:05:47.000000000 +0100 @@ -23,14 +23,14 @@ static void explain(void) { fprintf(stderr, - "Usage: ... macvlan mode { private | vepa | bridge }\n" + "Usage: ... macvlan mode { private | vepa | bridge | passthru }\n" ); } static int mode_arg(void) { fprintf(stderr, "Error: argument of \"mode\" must be \"private\", " - "\"vepa\" or \"bridge\"\n"); + "\"vepa\", \"bridge\" or \"passthru\" \n"); return -1; } @@ -48,6 +48,8 @@ mode = MACVLAN_MODE_VEPA; else if (strcmp(*argv, "bridge") == 0) mode = MACVLAN_MODE_BRIDGE; + else if (strcmp(*argv, "passthru") == 0) + mode = MACVLAN_MODE_PASSTHRU; else return mode_arg(); @@ -82,6 +84,7 @@ mode == MACVLAN_MODE_PRIVATE ? "private" : mode == MACVLAN_MODE_VEPA ? "vepa" : mode == MACVLAN_MODE_BRIDGE ? "bridge" + : mode == MACVLAN_MODE_PASSTHRU ? "passthru" : "unknown"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/ip/iplink_macvtap.c new/iproute2-2.6.38/ip/iplink_macvtap.c --- old/iproute2-2.6.37/ip/iplink_macvtap.c 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/ip/iplink_macvtap.c 2011-03-17 18:05:47.000000000 +0100 @@ -20,14 +20,14 @@ static void explain(void) { fprintf(stderr, - "Usage: ... macvtap mode { private | vepa | bridge }\n" + "Usage: ... macvtap mode { private | vepa | bridge | passthru }\n" ); } static int mode_arg(void) { fprintf(stderr, "Error: argument of \"mode\" must be \"private\", " - "\"vepa\" or \"bridge\"\n"); + "\"vepa\", \"bridge\" or \"passthru\" \n"); return -1; } @@ -45,6 +45,8 @@ mode = MACVLAN_MODE_VEPA; else if (strcmp(*argv, "bridge") == 0) mode = MACVLAN_MODE_BRIDGE; + else if (strcmp(*argv, "passthru") == 0) + mode = MACVLAN_MODE_PASSTHRU; else return mode_arg(); @@ -79,6 +81,7 @@ mode == MACVLAN_MODE_PRIVATE ? "private" : mode == MACVLAN_MODE_VEPA ? "vepa" : mode == MACVLAN_MODE_BRIDGE ? "bridge" + : mode == MACVLAN_MODE_PASSTHRU ? "passthru" : "unknown"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/ip/iproute.c new/iproute2-2.6.38/ip/iproute.c --- old/iproute2-2.6.37/ip/iproute.c 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/ip/iproute.c 2011-03-17 18:05:47.000000000 +0100 @@ -85,7 +85,7 @@ fprintf(stderr, "MP_ALGO := { rr | drr | random | wrandom }\n"); fprintf(stderr, "NHFLAGS := [ onlink | pervasive ]\n"); fprintf(stderr, "RTPROTO := [ kernel | boot | static | NUMBER ]\n"); - fprintf(stderr, "TIME := NUMBER[s|ms|us|ns|j]\n"); + fprintf(stderr, "TIME := NUMBER[s|ms]\n"); exit(-1); } @@ -526,8 +526,6 @@ if (mxrta[i] == NULL) continue; - if (!hz) - hz = get_user_hz(); if (i < sizeof(mx_names)/sizeof(char*) && mx_names[i]) fprintf(fp, " %s", mx_names[i]); @@ -549,18 +547,15 @@ case RTAX_RTT: case RTAX_RTTVAR: case RTAX_RTO_MIN: - val *= 1000; if (i == RTAX_RTT) val /= 8; else if (i == RTAX_RTTVAR) val /= 4; - if (val >= hz) - fprintf(fp, " %llums", - (unsigned long long) val / hz); + if (val >= 1000) + fprintf(fp, " %gs", val/1e3); else - fprintf(fp, " %.2fms", - (double)val / hz); + fprintf(fp, " %ums", val); } } } @@ -840,7 +835,7 @@ mxlock |= (1<<RTAX_RTT); NEXT_ARG(); } - if (get_jiffies(&rtt, *argv, 0, &raw)) + if (get_time_rtt(&rtt, *argv, &raw)) invarg("\"rtt\" value is invalid\n", *argv); rta_addattr32(mxrta, sizeof(mxbuf), RTAX_RTT, (raw) ? rtt : rtt * 8); @@ -848,7 +843,7 @@ unsigned rto_min; NEXT_ARG(); mxlock |= (1<<RTAX_RTO_MIN); - if (get_jiffies(&rto_min, *argv, 0, &raw)) + if (get_time_rtt(&rto_min, *argv, &raw)) invarg("\"rto_min\" value is invalid\n", *argv); rta_addattr32(mxrta, sizeof(mxbuf), RTAX_RTO_MIN, @@ -900,7 +895,7 @@ mxlock |= (1<<RTAX_RTTVAR); NEXT_ARG(); } - if (get_jiffies(&win, *argv, 0, &raw)) + if (get_time_rtt(&win, *argv, &raw)) invarg("\"rttvar\" value is invalid\n", *argv); rta_addattr32(mxrta, sizeof(mxbuf), RTAX_RTTVAR, (raw) ? win : win * 4); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/ip/ipxfrm.c new/iproute2-2.6.38/ip/ipxfrm.c --- old/iproute2-2.6.37/ip/ipxfrm.c 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/ip/ipxfrm.c 2011-03-17 18:05:47.000000000 +0100 @@ -155,6 +155,7 @@ static const struct typeent algo_types[]= { { "enc", XFRMA_ALG_CRYPT }, { "auth", XFRMA_ALG_AUTH }, { "comp", XFRMA_ALG_COMP }, { "aead", XFRMA_ALG_AEAD }, + { "auth-trunc", XFRMA_ALG_AUTH_TRUNC }, { NULL, -1 } }; @@ -570,6 +571,25 @@ fprintf(fp, "%s", _SL_); } +static void xfrm_auth_trunc_print(struct xfrm_algo_auth *algo, int len, + FILE *fp, const char *prefix) +{ + struct { + struct xfrm_algo algo; + char key[algo->alg_key_len / 8]; + } base; + + memcpy(base.algo.alg_name, algo->alg_name, sizeof(base.algo.alg_name)); + base.algo.alg_key_len = algo->alg_key_len; + memcpy(base.algo.alg_key, algo->alg_key, algo->alg_key_len / 8); + + __xfrm_algo_print(&base.algo, XFRMA_ALG_AUTH_TRUNC, len, fp, prefix, 0); + + fprintf(fp, " %d", algo->alg_trunc_len); + + fprintf(fp, "%s", _SL_); +} + static void xfrm_tmpl_print(struct xfrm_user_tmpl *tmpls, int len, __u16 family, FILE *fp, const char *prefix) { @@ -677,12 +697,18 @@ fprintf(fp, "\tmark %d/0x%x\n", m->v, m->m); } - if (tb[XFRMA_ALG_AUTH]) { + if (tb[XFRMA_ALG_AUTH] && !tb[XFRMA_ALG_AUTH_TRUNC]) { struct rtattr *rta = tb[XFRMA_ALG_AUTH]; xfrm_algo_print((struct xfrm_algo *) RTA_DATA(rta), XFRMA_ALG_AUTH, RTA_PAYLOAD(rta), fp, prefix); } + if (tb[XFRMA_ALG_AUTH_TRUNC]) { + struct rtattr *rta = tb[XFRMA_ALG_AUTH_TRUNC]; + xfrm_auth_trunc_print((struct xfrm_algo_auth *) RTA_DATA(rta), + RTA_PAYLOAD(rta), fp, prefix); + } + if (tb[XFRMA_ALG_AEAD]) { struct rtattr *rta = tb[XFRMA_ALG_AEAD]; xfrm_aead_print((struct xfrm_algo_aead *)RTA_DATA(rta), @@ -850,6 +876,20 @@ xfrm_lifetime_print(&xsinfo->lft, &xsinfo->curlft, fp, buf); xfrm_stats_print(&xsinfo->stats, fp, buf); } + + if (tb[XFRMA_SEC_CTX]) { + struct xfrm_user_sec_ctx *sctx; + + fprintf(fp, "\tsecurity context "); + + if (RTA_PAYLOAD(tb[XFRMA_SEC_CTX]) < sizeof(*sctx)) + fprintf(fp, "(ERROR truncated)"); + + sctx = (struct xfrm_user_sec_ctx *)RTA_DATA(tb[XFRMA_SEC_CTX]); + + fprintf(fp, "%s %s", (char *)(sctx + 1), _SL_); + } + } void xfrm_policy_info_print(struct xfrm_userpolicy_info *xpinfo, @@ -862,6 +902,20 @@ xfrm_selector_print(&xpinfo->sel, preferred_family, fp, title); + if (tb[XFRMA_SEC_CTX]) { + struct xfrm_user_sec_ctx *sctx; + + fprintf(fp, "\tsecurity context "); + + if (RTA_PAYLOAD(tb[XFRMA_SEC_CTX]) < sizeof(*sctx)) + fprintf(fp, "(ERROR truncated)"); + + sctx = (struct xfrm_user_sec_ctx *)RTA_DATA(tb[XFRMA_SEC_CTX]); + + fprintf(fp, "%s ", (char *)(sctx + 1)); + fprintf(fp, "%s", _SL_); + } + if (prefix) STRBUF_CAT(buf, prefix); STRBUF_CAT(buf, "\t"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/ip/xfrm.h new/iproute2-2.6.38/ip/xfrm.h --- old/iproute2-2.6.37/ip/xfrm.h 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/ip/xfrm.h 2011-03-17 18:05:47.000000000 +0100 @@ -154,5 +154,6 @@ int xfrm_selector_parse(struct xfrm_selector *sel, int *argcp, char ***argvp); int xfrm_lifetime_cfg_parse(struct xfrm_lifetime_cfg *lft, int *argcp, char ***argvp); - +int xfrm_sctx_parse(char *ctxstr, char *context, + struct xfrm_user_sec_ctx *sctx); #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/ip/xfrm_policy.c new/iproute2-2.6.38/ip/xfrm_policy.c --- old/iproute2-2.6.37/ip/xfrm_policy.c 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/ip/xfrm_policy.c 2011-03-17 18:05:47.000000000 +0100 @@ -48,14 +48,15 @@ #define NLMSG_BUF_SIZE 4096 #define RTA_BUF_SIZE 2048 #define XFRM_TMPLS_BUF_SIZE 1024 +#define CTX_BUF_SIZE 256 static void usage(void) __attribute__((noreturn)); static void usage(void) { - fprintf(stderr, "Usage: ip xfrm policy { add | update } dir DIR SELECTOR [ index INDEX ] [ ptype PTYPE ]\n"); + fprintf(stderr, "Usage: ip xfrm policy { add | update } dir DIR SELECTOR [ ctx SEC_CTX ][ index INDEX ] [ ptype PTYPE ]\n"); fprintf(stderr, " [ action ACTION ] [ priority PRIORITY ] [ flag FLAG-LIST ] [ LIMIT-LIST ] [ TMPL-LIST ] [mark MARK [mask MASK]]\n"); - fprintf(stderr, "Usage: ip xfrm policy { delete | get } dir DIR [ SELECTOR | index INDEX ] [ ptype PTYPE ] [mark MARK [mask MASK]]\n"); + fprintf(stderr, "Usage: ip xfrm policy { delete | get } dir DIR [ SELECTOR | index INDEX ] [ ctx SEC_CTX ][ ptype PTYPE ] [mark MARK [mask MASK]]\n"); fprintf(stderr, "Usage: ip xfrm policy { deleteall | list } [ dir DIR ] [ SELECTOR ]\n"); fprintf(stderr, " [ index INDEX ] [ action ACTION ] [ priority PRIORITY ] [ flag FLAG-LIST ]\n"); fprintf(stderr, "Usage: ip xfrm policy flush [ ptype PTYPE ]\n"); @@ -222,6 +223,23 @@ return 0; } +int xfrm_sctx_parse(char *ctxstr, char *s, + struct xfrm_user_sec_ctx *sctx) +{ + int slen; + + slen = strlen(s) + 1; + + sctx->exttype = XFRMA_SEC_CTX; + sctx->ctx_doi = 1; + sctx->ctx_alg = 1; + sctx->ctx_len = slen; + sctx->len = sizeof(struct xfrm_user_sec_ctx) + slen; + memcpy(ctxstr, s, slen); + + return 0; +} + static int xfrm_policy_modify(int cmd, unsigned flags, int argc, char **argv) { struct rtnl_handle rth; @@ -233,14 +251,20 @@ char *dirp = NULL; char *selp = NULL; char *ptypep = NULL; + char *sctxp = NULL; struct xfrm_userpolicy_type upt; char tmpls_buf[XFRM_TMPLS_BUF_SIZE]; int tmpls_len = 0; struct xfrm_mark mark = {0, 0}; + struct { + struct xfrm_user_sec_ctx sctx; + char str[CTX_BUF_SIZE]; + } ctx; memset(&req, 0, sizeof(req)); memset(&upt, 0, sizeof(upt)); memset(&tmpls_buf, 0, sizeof(tmpls_buf)); + memset(&ctx, 0, sizeof(ctx)); req.n.nlmsg_len = NLMSG_LENGTH(sizeof(req.xpinfo)); req.n.nlmsg_flags = NLM_F_REQUEST|flags; @@ -260,6 +284,15 @@ NEXT_ARG(); xfrm_policy_dir_parse(&req.xpinfo.dir, &argc, &argv); + } else if (strcmp(*argv, "ctx") == 0) { + char *context; + + if (sctxp) + duparg("ctx", *argv); + sctxp = *argv; + NEXT_ARG(); + context = *argv; + xfrm_sctx_parse((char *)&ctx.str, context, &ctx.sctx); } else if (strcmp(*argv, "mark") == 0) { xfrm_parse_mark(&mark, &argc, &argv); } else if (strcmp(*argv, "index") == 0) { @@ -347,6 +380,10 @@ } } + if (sctxp) { + addattr_l(&req.n, sizeof(req), XFRMA_SEC_CTX, + (void *)&ctx, ctx.sctx.len); + } if (rtnl_open_byproto(&rth, 0, NETLINK_XFRM) < 0) exit(1); @@ -528,11 +565,18 @@ char *selp = NULL; char *indexp = NULL; char *ptypep = NULL; + char *sctxp = NULL; struct xfrm_userpolicy_type upt; struct xfrm_mark mark = {0, 0}; + struct { + struct xfrm_user_sec_ctx sctx; + char str[CTX_BUF_SIZE]; + } ctx; + memset(&req, 0, sizeof(req)); memset(&upt, 0, sizeof(upt)); + memset(&ctx, 0, sizeof(ctx)); req.n.nlmsg_len = NLMSG_LENGTH(sizeof(req.xpid)); req.n.nlmsg_flags = NLM_F_REQUEST; @@ -547,6 +591,15 @@ NEXT_ARG(); xfrm_policy_dir_parse(&req.xpid.dir, &argc, &argv); + } else if (strcmp(*argv, "ctx") == 0) { + char *context; + + if (sctxp) + duparg("ctx", *argv); + sctxp = *argv; + NEXT_ARG(); + context = *argv; + xfrm_sctx_parse((char *)&ctx.str, context, &ctx.sctx); } else if (strcmp(*argv, "mark") == 0) { xfrm_parse_mark(&mark, &argc, &argv); } else if (strcmp(*argv, "index") == 0) { @@ -610,6 +663,11 @@ } } + if (sctxp) { + addattr_l(&req.n, sizeof(req), XFRMA_SEC_CTX, + (void *)&ctx, ctx.sctx.len); + } + if (rtnl_talk(&rth, &req.n, 0, 0, res_nlbuf, NULL, NULL) < 0) exit(2); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/ip/xfrm_state.c new/iproute2-2.6.38/ip/xfrm_state.c --- old/iproute2-2.6.37/ip/xfrm_state.c 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/ip/xfrm_state.c 2011-03-17 18:05:47.000000000 +0100 @@ -50,12 +50,13 @@ #define NLMSG_BUF_SIZE 4096 #define RTA_BUF_SIZE 2048 #define XFRM_ALGO_KEY_BUF_SIZE 512 +#define CTX_BUF_SIZE 256 static void usage(void) __attribute__((noreturn)); static void usage(void) { - fprintf(stderr, "Usage: ip xfrm state { add | update } ID [ XFRM_OPT ] [ mode MODE ]\n"); + fprintf(stderr, "Usage: ip xfrm state { add | update } ID [ XFRM_OPT ] [ ctx SEC_CTX ] [ mode MODE ]\n"); fprintf(stderr, " [ reqid REQID ] [ seq SEQ ] [ replay-window SIZE ] [ flag FLAG-LIST ]\n"); fprintf(stderr, " [ encap ENCAP ] [ sel SELECTOR ] [ replay-seq SEQ ]\n"); fprintf(stderr, " [ replay-oseq SEQ ] [ LIMIT-LIST ]\n"); @@ -90,11 +91,12 @@ fprintf(stderr, "ALGO-LIST := [ ALGO-LIST ] | [ ALGO ]\n"); fprintf(stderr, "ALGO := ALGO_TYPE ALGO_NAME ALGO_KEY " - "[ ALGO_ICV_LEN ]\n"); + "[ ALGO_ICV_LEN | ALGO_TRUNC_LEN ]\n"); fprintf(stderr, "ALGO_TYPE := [ "); fprintf(stderr, "%s | ", strxf_algotype(XFRMA_ALG_AEAD)); fprintf(stderr, "%s | ", strxf_algotype(XFRMA_ALG_CRYPT)); fprintf(stderr, "%s | ", strxf_algotype(XFRMA_ALG_AUTH)); + fprintf(stderr, "%s | ", strxf_algotype(XFRMA_ALG_AUTH_TRUNC)); fprintf(stderr, "%s ", strxf_algotype(XFRMA_ALG_COMP)); fprintf(stderr, "]\n"); @@ -246,10 +248,16 @@ char *aalgop = NULL; char *calgop = NULL; char *coap = NULL; + char *sctxp = NULL; struct xfrm_mark mark = {0, 0}; + struct { + struct xfrm_user_sec_ctx sctx; + char str[CTX_BUF_SIZE]; + } ctx; memset(&req, 0, sizeof(req)); memset(&replay, 0, sizeof(replay)); + memset(&ctx, 0, sizeof(ctx)); req.n.nlmsg_len = NLMSG_LENGTH(sizeof(req.xsinfo)); req.n.nlmsg_flags = NLM_F_REQUEST|flags; @@ -333,6 +341,19 @@ addattr_l(&req.n, sizeof(req.buf), XFRMA_COADDR, (void *)&xcoa, sizeof(xcoa)); + } else if (strcmp(*argv, "ctx") == 0) { + char *context; + + if (sctxp) + duparg("ctx", *argv); + sctxp = *argv; + + NEXT_ARG(); + context = *argv; + + xfrm_sctx_parse((char *)&ctx.str, context, &ctx.sctx); + addattr_l(&req.n, sizeof(req.buf), XFRMA_SEC_CTX, + (void *)&ctx, ctx.sctx.len); } else { /* try to assume ALGO */ int type = xfrm_algotype_getbyname(*argv); @@ -340,6 +361,7 @@ case XFRMA_ALG_AEAD: case XFRMA_ALG_CRYPT: case XFRMA_ALG_AUTH: + case XFRMA_ALG_AUTH_TRUNC: case XFRMA_ALG_COMP: { /* ALGO */ @@ -347,11 +369,12 @@ union { struct xfrm_algo alg; struct xfrm_algo_aead aead; + struct xfrm_algo_auth auth; } u; char buf[XFRM_ALGO_KEY_BUF_SIZE]; } alg = {}; int len; - __u32 icvlen; + __u32 icvlen, trunclen; char *name; char *key; char *buf; @@ -368,6 +391,7 @@ ealgop = *argv; break; case XFRMA_ALG_AUTH: + case XFRMA_ALG_AUTH_TRUNC: if (aalgop) duparg("ALGOTYPE", *argv); aalgop = *argv; @@ -395,21 +419,33 @@ buf = alg.u.alg.alg_key; len = sizeof(alg.u.alg); - if (type != XFRMA_ALG_AEAD) - goto parse_algo; + switch (type) { + case XFRMA_ALG_AEAD: + if (!NEXT_ARG_OK()) + missarg("ALGOICVLEN"); + NEXT_ARG(); + if (get_u32(&icvlen, *argv, 0)) + invarg("\"aead\" ICV length is invalid", + *argv); + alg.u.aead.alg_icv_len = icvlen; - if (!NEXT_ARG_OK()) - missarg("ALGOICVLEN"); - NEXT_ARG(); - if (get_u32(&icvlen, *argv, 0)) - invarg("\"aead\" ICV length is invalid", - *argv); - alg.u.aead.alg_icv_len = icvlen; + buf = alg.u.aead.alg_key; + len = sizeof(alg.u.aead); + break; + case XFRMA_ALG_AUTH_TRUNC: + if (!NEXT_ARG_OK()) + missarg("ALGOTRUNCLEN"); + NEXT_ARG(); + if (get_u32(&trunclen, *argv, 0)) + invarg("\"auth\" trunc length is invalid", + *argv); + alg.u.auth.alg_trunc_len = trunclen; - buf = alg.u.aead.alg_key; - len = sizeof(alg.u.aead); + buf = alg.u.auth.alg_key; + len = sizeof(alg.u.auth); + break; + } -parse_algo: xfrm_algo_parse((void *)&alg, type, name, key, buf, sizeof(alg.buf)); len += alg.u.alg.alg_key_len; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/lib/utils.c new/iproute2-2.6.38/lib/utils.c --- old/iproute2-2.6.37/lib/utils.c 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/lib/utils.c 2011-03-17 18:05:47.000000000 +0100 @@ -93,14 +93,13 @@ } /* - * get_jiffies is "translated" from a similar routine "get_time" in - * tc_util.c. we don't use the exact same routine because tc passes - * microseconds to the kernel and the callers of get_jiffies want - * to pass jiffies, and have a different assumption for the units of - * a "raw" number. + * get_time_rtt is "translated" from a similar routine "get_time" in + * tc_util.c. We don't use the exact same routine because tc passes + * microseconds to the kernel and the callers of get_time_rtt want to + * pass milliseconds (standard unit for rtt values since 2.6.27), and + * have a different assumption for the units of a "raw" number. */ - -int get_jiffies(unsigned *jiffies, const char *arg, int base, int *raw) +int get_time_rtt(unsigned *val, const char *arg, int *raw) { double t; unsigned long res; @@ -112,35 +111,22 @@ return -1; } else { - res = strtoul(arg,&p,base); + res = strtoul(arg, &p, 0); if (res > UINT_MAX) return -1; t = (double)res; } if (p == arg) return -1; - - if (__iproute2_hz_internal == 0) - __iproute2_hz_internal = __get_hz(); - *raw = 1; if (*p) { *raw = 0; if (strcasecmp(p, "s") == 0 || strcasecmp(p, "sec")==0 || strcasecmp(p, "secs")==0) - t *= __iproute2_hz_internal; + t *= 1000; else if (strcasecmp(p, "ms") == 0 || strcasecmp(p, "msec")==0 || strcasecmp(p, "msecs") == 0) - t *= __iproute2_hz_internal/1000.0; - else if (strcasecmp(p, "us") == 0 || strcasecmp(p, "usec")==0 || - strcasecmp(p, "usecs") == 0) - t *= __iproute2_hz_internal/1000000.0; - else if (strcasecmp(p, "ns") == 0 || strcasecmp(p, "nsec")==0 || - strcasecmp(p, "nsecs") == 0) - t *= __iproute2_hz_internal/1000000000.0; - else if (strcasecmp(p, "j") == 0 || strcasecmp(p, "hz") == 0 || - strcasecmp(p,"jiffies") == 0) t *= 1.0; /* allow suffix, do nothing */ else return -1; @@ -148,9 +134,9 @@ /* emulate ceil() without having to bring-in -lm and always be >= 1 */ - *jiffies = t; - if (*jiffies < t) - *jiffies += 1; + *val = t; + if (*val < t) + *val += 1; return 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iproute2-2.6.37/man/man8/ip.8 new/iproute2-2.6.38/man/man8/ip.8 --- old/iproute2-2.6.37/man/man8/ip.8 2011-01-07 18:54:30.000000000 +0100 +++ new/iproute2-2.6.38/man/man8/ip.8 2011-03-17 18:05:47.000000000 +0100 @@ -42,7 +42,7 @@ .RB "[ " mtu .IR MTU " ]" .br -.BR type TYPE +.BR type " TYPE" .RI "[ " ARGS " ]" .ti -8 @@ -51,7 +51,7 @@ .ti -8 .BI "ip link delete " DEVICE -.BI type TYPE +.BI type " TYPE" .RI "[ " ARGS " ]" .ti -8 @@ -391,7 +391,7 @@ .IR KEY " := { " DOTTED_QUAD " | " NUMBER " }" .ti -8 -.IR TIME " := " NUMBER "[s|ms|us|ns|j]" +.IR TIME " := " NUMBER "[s|ms]" .ti -8 .BR "ip maddr" " [ " add " | " del " ]" @@ -1616,10 +1616,7 @@ specified the units are raw values passed directly to the routing code to maintain compatibility with previous releases. Otherwise if a suffix of s, sec or secs is used to specify -seconds; ms, msec or msecs to specify milliseconds; us, usec -or usecs to specify microseconds; ns, nsec or nsecs to specify -nanoseconds; j, hz or jiffies to specify jiffies, the value is -converted to what the routing code expects. +seconds and ms, msec or msecs to specify milliseconds. .TP ++++++ iproute2-2.6.29-1-HZ.diff -> iproute2-HZ.diff ++++++ ++++++ iproute2-2.6.29-1-libdir-1.diff -> iproute2-libdir-1.diff ++++++ ++++++ iproute2-2.6.29-1-memleak.diff -> iproute2-memleak.diff ++++++ ++++++ iproute2-2.6.29-1-pdfdoc.diff -> iproute2-pdfdoc.diff ++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
