[NET_SCHED]: Convert classifiers from rtnetlink to new netlink API
Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
1e90474c37
commit
add93b610a
@@ -399,15 +399,15 @@ static u32 gen_tunnel(struct rsvp_head *data)
|
||||
|
||||
static int rsvp_change(struct tcf_proto *tp, unsigned long base,
|
||||
u32 handle,
|
||||
struct rtattr **tca,
|
||||
struct nlattr **tca,
|
||||
unsigned long *arg)
|
||||
{
|
||||
struct rsvp_head *data = tp->root;
|
||||
struct rsvp_filter *f, **fp;
|
||||
struct rsvp_session *s, **sp;
|
||||
struct tc_rsvp_pinfo *pinfo = NULL;
|
||||
struct rtattr *opt = tca[TCA_OPTIONS-1];
|
||||
struct rtattr *tb[TCA_RSVP_MAX];
|
||||
struct nlattr *opt = tca[TCA_OPTIONS-1];
|
||||
struct nlattr *tb[TCA_RSVP_MAX + 1];
|
||||
struct tcf_exts e;
|
||||
unsigned h1, h2;
|
||||
__be32 *dst;
|
||||
@@ -416,7 +416,7 @@ static int rsvp_change(struct tcf_proto *tp, unsigned long base,
|
||||
if (opt == NULL)
|
||||
return handle ? -EINVAL : 0;
|
||||
|
||||
if (rtattr_parse_nested(tb, TCA_RSVP_MAX, opt) < 0)
|
||||
if (nla_parse_nested(tb, TCA_RSVP_MAX, opt, NULL) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
err = tcf_exts_validate(tp, tb, tca[TCA_RATE-1], &e, &rsvp_ext_map);
|
||||
@@ -429,7 +429,7 @@ static int rsvp_change(struct tcf_proto *tp, unsigned long base,
|
||||
if (f->handle != handle && handle)
|
||||
goto errout2;
|
||||
if (tb[TCA_RSVP_CLASSID-1]) {
|
||||
f->res.classid = *(u32*)RTA_DATA(tb[TCA_RSVP_CLASSID-1]);
|
||||
f->res.classid = *(u32*)nla_data(tb[TCA_RSVP_CLASSID-1]);
|
||||
tcf_bind_filter(tp, &f->res, base);
|
||||
}
|
||||
|
||||
@@ -452,30 +452,30 @@ static int rsvp_change(struct tcf_proto *tp, unsigned long base,
|
||||
h2 = 16;
|
||||
if (tb[TCA_RSVP_SRC-1]) {
|
||||
err = -EINVAL;
|
||||
if (RTA_PAYLOAD(tb[TCA_RSVP_SRC-1]) != sizeof(f->src))
|
||||
if (nla_len(tb[TCA_RSVP_SRC-1]) != sizeof(f->src))
|
||||
goto errout;
|
||||
memcpy(f->src, RTA_DATA(tb[TCA_RSVP_SRC-1]), sizeof(f->src));
|
||||
memcpy(f->src, nla_data(tb[TCA_RSVP_SRC-1]), sizeof(f->src));
|
||||
h2 = hash_src(f->src);
|
||||
}
|
||||
if (tb[TCA_RSVP_PINFO-1]) {
|
||||
err = -EINVAL;
|
||||
if (RTA_PAYLOAD(tb[TCA_RSVP_PINFO-1]) < sizeof(struct tc_rsvp_pinfo))
|
||||
if (nla_len(tb[TCA_RSVP_PINFO-1]) < sizeof(struct tc_rsvp_pinfo))
|
||||
goto errout;
|
||||
pinfo = RTA_DATA(tb[TCA_RSVP_PINFO-1]);
|
||||
pinfo = nla_data(tb[TCA_RSVP_PINFO-1]);
|
||||
f->spi = pinfo->spi;
|
||||
f->tunnelhdr = pinfo->tunnelhdr;
|
||||
}
|
||||
if (tb[TCA_RSVP_CLASSID-1]) {
|
||||
err = -EINVAL;
|
||||
if (RTA_PAYLOAD(tb[TCA_RSVP_CLASSID-1]) != 4)
|
||||
if (nla_len(tb[TCA_RSVP_CLASSID-1]) != 4)
|
||||
goto errout;
|
||||
f->res.classid = *(u32*)RTA_DATA(tb[TCA_RSVP_CLASSID-1]);
|
||||
f->res.classid = *(u32*)nla_data(tb[TCA_RSVP_CLASSID-1]);
|
||||
}
|
||||
|
||||
err = -EINVAL;
|
||||
if (RTA_PAYLOAD(tb[TCA_RSVP_DST-1]) != sizeof(f->src))
|
||||
if (nla_len(tb[TCA_RSVP_DST-1]) != sizeof(f->src))
|
||||
goto errout;
|
||||
dst = RTA_DATA(tb[TCA_RSVP_DST-1]);
|
||||
dst = nla_data(tb[TCA_RSVP_DST-1]);
|
||||
h1 = hash_dst(dst, pinfo ? pinfo->protocol : 0, pinfo ? pinfo->tunnelid : 0);
|
||||
|
||||
err = -ENOMEM;
|
||||
@@ -594,7 +594,7 @@ static int rsvp_dump(struct tcf_proto *tp, unsigned long fh,
|
||||
struct rsvp_filter *f = (struct rsvp_filter*)fh;
|
||||
struct rsvp_session *s;
|
||||
unsigned char *b = skb_tail_pointer(skb);
|
||||
struct rtattr *rta;
|
||||
struct nlattr *nla;
|
||||
struct tc_rsvp_pinfo pinfo;
|
||||
|
||||
if (f == NULL)
|
||||
@@ -604,32 +604,32 @@ static int rsvp_dump(struct tcf_proto *tp, unsigned long fh,
|
||||
t->tcm_handle = f->handle;
|
||||
|
||||
|
||||
rta = (struct rtattr*)b;
|
||||
RTA_PUT(skb, TCA_OPTIONS, 0, NULL);
|
||||
nla = (struct nlattr*)b;
|
||||
NLA_PUT(skb, TCA_OPTIONS, 0, NULL);
|
||||
|
||||
RTA_PUT(skb, TCA_RSVP_DST, sizeof(s->dst), &s->dst);
|
||||
NLA_PUT(skb, TCA_RSVP_DST, sizeof(s->dst), &s->dst);
|
||||
pinfo.dpi = s->dpi;
|
||||
pinfo.spi = f->spi;
|
||||
pinfo.protocol = s->protocol;
|
||||
pinfo.tunnelid = s->tunnelid;
|
||||
pinfo.tunnelhdr = f->tunnelhdr;
|
||||
pinfo.pad = 0;
|
||||
RTA_PUT(skb, TCA_RSVP_PINFO, sizeof(pinfo), &pinfo);
|
||||
NLA_PUT(skb, TCA_RSVP_PINFO, sizeof(pinfo), &pinfo);
|
||||
if (f->res.classid)
|
||||
RTA_PUT(skb, TCA_RSVP_CLASSID, 4, &f->res.classid);
|
||||
NLA_PUT(skb, TCA_RSVP_CLASSID, 4, &f->res.classid);
|
||||
if (((f->handle>>8)&0xFF) != 16)
|
||||
RTA_PUT(skb, TCA_RSVP_SRC, sizeof(f->src), f->src);
|
||||
NLA_PUT(skb, TCA_RSVP_SRC, sizeof(f->src), f->src);
|
||||
|
||||
if (tcf_exts_dump(skb, &f->exts, &rsvp_ext_map) < 0)
|
||||
goto rtattr_failure;
|
||||
goto nla_put_failure;
|
||||
|
||||
rta->rta_len = skb_tail_pointer(skb) - b;
|
||||
nla->nla_len = skb_tail_pointer(skb) - b;
|
||||
|
||||
if (tcf_exts_dump_stats(skb, &f->exts, &rsvp_ext_map) < 0)
|
||||
goto rtattr_failure;
|
||||
goto nla_put_failure;
|
||||
return skb->len;
|
||||
|
||||
rtattr_failure:
|
||||
nla_put_failure:
|
||||
nlmsg_trim(skb, b);
|
||||
return -1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user