diff options
author | Jiri Pirko <jiri@resnulli.us> | 2013-12-08 06:16:09 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-12-10 21:50:00 -0500 |
commit | 9a32b860431aee0cba50ab2414bfa29f4bb2f0d7 (patch) | |
tree | 7f513202f363507c1ed7b90b6b0d524af9106d69 /net | |
parent | 94a12b15e4c575e0aa0ba5e24a4f213163a823d0 (diff) |
dn_dev: add support for IFA_FLAGS nl attribute
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/decnet/dn_dev.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c index dd0dfb25f4b1..a603823a3e27 100644 --- a/net/decnet/dn_dev.c +++ b/net/decnet/dn_dev.c | |||
@@ -561,6 +561,7 @@ static const struct nla_policy dn_ifa_policy[IFA_MAX+1] = { | |||
561 | [IFA_LOCAL] = { .type = NLA_U16 }, | 561 | [IFA_LOCAL] = { .type = NLA_U16 }, |
562 | [IFA_LABEL] = { .type = NLA_STRING, | 562 | [IFA_LABEL] = { .type = NLA_STRING, |
563 | .len = IFNAMSIZ - 1 }, | 563 | .len = IFNAMSIZ - 1 }, |
564 | [IFA_FLAGS] = { .type = NLA_U32 }, | ||
564 | }; | 565 | }; |
565 | 566 | ||
566 | static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) | 567 | static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) |
@@ -648,7 +649,8 @@ static int dn_nl_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
648 | 649 | ||
649 | ifa->ifa_local = nla_get_le16(tb[IFA_LOCAL]); | 650 | ifa->ifa_local = nla_get_le16(tb[IFA_LOCAL]); |
650 | ifa->ifa_address = nla_get_le16(tb[IFA_ADDRESS]); | 651 | ifa->ifa_address = nla_get_le16(tb[IFA_ADDRESS]); |
651 | ifa->ifa_flags = ifm->ifa_flags; | 652 | ifa->ifa_flags = tb[IFA_FLAGS] ? nla_get_u32(tb[IFA_FLAGS]) : |
653 | ifm->ifa_flags; | ||
652 | ifa->ifa_scope = ifm->ifa_scope; | 654 | ifa->ifa_scope = ifm->ifa_scope; |
653 | ifa->ifa_dev = dn_db; | 655 | ifa->ifa_dev = dn_db; |
654 | 656 | ||
@@ -669,7 +671,8 @@ static inline size_t dn_ifaddr_nlmsg_size(void) | |||
669 | return NLMSG_ALIGN(sizeof(struct ifaddrmsg)) | 671 | return NLMSG_ALIGN(sizeof(struct ifaddrmsg)) |
670 | + nla_total_size(IFNAMSIZ) /* IFA_LABEL */ | 672 | + nla_total_size(IFNAMSIZ) /* IFA_LABEL */ |
671 | + nla_total_size(2) /* IFA_ADDRESS */ | 673 | + nla_total_size(2) /* IFA_ADDRESS */ |
672 | + nla_total_size(2); /* IFA_LOCAL */ | 674 | + nla_total_size(2) /* IFA_LOCAL */ |
675 | + nla_total_size(4); /* IFA_FLAGS */ | ||
673 | } | 676 | } |
674 | 677 | ||
675 | static int dn_nl_fill_ifaddr(struct sk_buff *skb, struct dn_ifaddr *ifa, | 678 | static int dn_nl_fill_ifaddr(struct sk_buff *skb, struct dn_ifaddr *ifa, |
@@ -677,6 +680,7 @@ static int dn_nl_fill_ifaddr(struct sk_buff *skb, struct dn_ifaddr *ifa, | |||
677 | { | 680 | { |
678 | struct ifaddrmsg *ifm; | 681 | struct ifaddrmsg *ifm; |
679 | struct nlmsghdr *nlh; | 682 | struct nlmsghdr *nlh; |
683 | u32 ifa_flags = ifa->ifa_flags | IFA_F_PERMANENT; | ||
680 | 684 | ||
681 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*ifm), flags); | 685 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*ifm), flags); |
682 | if (nlh == NULL) | 686 | if (nlh == NULL) |
@@ -685,7 +689,7 @@ static int dn_nl_fill_ifaddr(struct sk_buff *skb, struct dn_ifaddr *ifa, | |||
685 | ifm = nlmsg_data(nlh); | 689 | ifm = nlmsg_data(nlh); |
686 | ifm->ifa_family = AF_DECnet; | 690 | ifm->ifa_family = AF_DECnet; |
687 | ifm->ifa_prefixlen = 16; | 691 | ifm->ifa_prefixlen = 16; |
688 | ifm->ifa_flags = ifa->ifa_flags | IFA_F_PERMANENT; | 692 | ifm->ifa_flags = ifa_flags; |
689 | ifm->ifa_scope = ifa->ifa_scope; | 693 | ifm->ifa_scope = ifa->ifa_scope; |
690 | ifm->ifa_index = ifa->ifa_dev->dev->ifindex; | 694 | ifm->ifa_index = ifa->ifa_dev->dev->ifindex; |
691 | 695 | ||
@@ -694,7 +698,8 @@ static int dn_nl_fill_ifaddr(struct sk_buff *skb, struct dn_ifaddr *ifa, | |||
694 | (ifa->ifa_local && | 698 | (ifa->ifa_local && |
695 | nla_put_le16(skb, IFA_LOCAL, ifa->ifa_local)) || | 699 | nla_put_le16(skb, IFA_LOCAL, ifa->ifa_local)) || |
696 | (ifa->ifa_label[0] && | 700 | (ifa->ifa_label[0] && |
697 | nla_put_string(skb, IFA_LABEL, ifa->ifa_label))) | 701 | nla_put_string(skb, IFA_LABEL, ifa->ifa_label)) || |
702 | nla_put_u32(skb, IFA_FLAGS, ifa_flags)) | ||
698 | goto nla_put_failure; | 703 | goto nla_put_failure; |
699 | return nlmsg_end(skb, nlh); | 704 | return nlmsg_end(skb, nlh); |
700 | 705 | ||