diff options
author | Thomas Graf <tgraf@suug.ch> | 2008-09-02 20:30:27 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-09-02 20:30:27 -0400 |
commit | 2c10b32bf57db7ec6d4cca4c4aa3d86bacb01c8a (patch) | |
tree | dfb1fff234209b64828d9f932a543fd96b0561e2 /net/sched | |
parent | b171e19ed08c8ba832e5325fadf1be493f56665d (diff) |
netlink: Remove compat API for nested attributes
Removes all _nested_compat() functions from the API. The prio qdisc
no longer requires them and netem has its own format anyway. Their
existance is only confusing.
Resend: Also remove the wrapper macro.
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched')
-rw-r--r-- | net/sched/sch_netem.c | 18 | ||||
-rw-r--r-- | net/sched/sch_prio.c | 6 |
2 files changed, 17 insertions, 7 deletions
diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c index 3781e55046d0..a11959908d9a 100644 --- a/net/sched/sch_netem.c +++ b/net/sched/sch_netem.c | |||
@@ -388,6 +388,20 @@ static const struct nla_policy netem_policy[TCA_NETEM_MAX + 1] = { | |||
388 | [TCA_NETEM_CORRUPT] = { .len = sizeof(struct tc_netem_corrupt) }, | 388 | [TCA_NETEM_CORRUPT] = { .len = sizeof(struct tc_netem_corrupt) }, |
389 | }; | 389 | }; |
390 | 390 | ||
391 | static int parse_attr(struct nlattr *tb[], int maxtype, struct nlattr *nla, | ||
392 | const struct nla_policy *policy, int len) | ||
393 | { | ||
394 | int nested_len = nla_len(nla) - NLA_ALIGN(len); | ||
395 | |||
396 | if (nested_len < 0) | ||
397 | return -EINVAL; | ||
398 | if (nested_len >= nla_attr_size(0)) | ||
399 | return nla_parse(tb, maxtype, nla_data(nla) + NLA_ALIGN(len), | ||
400 | nested_len, policy); | ||
401 | memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1)); | ||
402 | return 0; | ||
403 | } | ||
404 | |||
391 | /* Parse netlink message to set options */ | 405 | /* Parse netlink message to set options */ |
392 | static int netem_change(struct Qdisc *sch, struct nlattr *opt) | 406 | static int netem_change(struct Qdisc *sch, struct nlattr *opt) |
393 | { | 407 | { |
@@ -399,8 +413,8 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt) | |||
399 | if (opt == NULL) | 413 | if (opt == NULL) |
400 | return -EINVAL; | 414 | return -EINVAL; |
401 | 415 | ||
402 | ret = nla_parse_nested_compat(tb, TCA_NETEM_MAX, opt, netem_policy, | 416 | qopt = nla_data(opt); |
403 | qopt, sizeof(*qopt)); | 417 | ret = parse_attr(tb, TCA_NETEM_MAX, opt, netem_policy, sizeof(*qopt)); |
404 | if (ret < 0) | 418 | if (ret < 0) |
405 | return ret; | 419 | return ret; |
406 | 420 | ||
diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c index a6697c686c7f..504a78cdb718 100644 --- a/net/sched/sch_prio.c +++ b/net/sched/sch_prio.c | |||
@@ -254,16 +254,12 @@ static int prio_dump(struct Qdisc *sch, struct sk_buff *skb) | |||
254 | { | 254 | { |
255 | struct prio_sched_data *q = qdisc_priv(sch); | 255 | struct prio_sched_data *q = qdisc_priv(sch); |
256 | unsigned char *b = skb_tail_pointer(skb); | 256 | unsigned char *b = skb_tail_pointer(skb); |
257 | struct nlattr *nest; | ||
258 | struct tc_prio_qopt opt; | 257 | struct tc_prio_qopt opt; |
259 | 258 | ||
260 | opt.bands = q->bands; | 259 | opt.bands = q->bands; |
261 | memcpy(&opt.priomap, q->prio2band, TC_PRIO_MAX+1); | 260 | memcpy(&opt.priomap, q->prio2band, TC_PRIO_MAX+1); |
262 | 261 | ||
263 | nest = nla_nest_compat_start(skb, TCA_OPTIONS, sizeof(opt), &opt); | 262 | NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt); |
264 | if (nest == NULL) | ||
265 | goto nla_put_failure; | ||
266 | nla_nest_compat_end(skb, nest); | ||
267 | 263 | ||
268 | return skb->len; | 264 | return skb->len; |
269 | 265 | ||