vlan_netlink.c (fe705ab1526bc2c8b7756f3a855f040ab2060af2) vlan_netlink.c (5e7565930524410f097f5b04f8aba663089a6ffc)
1/*
2 * VLAN netlink control interface
3 *
4 * Copyright (c) 2007 Patrick McHardy <kaber@trash.net>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * version 2 as published by the Free Software Foundation.

--- 46 unchanged lines hidden (view full) ---

55 if (data[IFLA_VLAN_ID]) {
56 id = nla_get_u16(data[IFLA_VLAN_ID]);
57 if (id >= VLAN_VID_MASK)
58 return -ERANGE;
59 }
60 if (data[IFLA_VLAN_FLAGS]) {
61 flags = nla_data(data[IFLA_VLAN_FLAGS]);
62 if ((flags->flags & flags->mask) &
1/*
2 * VLAN netlink control interface
3 *
4 * Copyright (c) 2007 Patrick McHardy <kaber@trash.net>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * version 2 as published by the Free Software Foundation.

--- 46 unchanged lines hidden (view full) ---

55 if (data[IFLA_VLAN_ID]) {
56 id = nla_get_u16(data[IFLA_VLAN_ID]);
57 if (id >= VLAN_VID_MASK)
58 return -ERANGE;
59 }
60 if (data[IFLA_VLAN_FLAGS]) {
61 flags = nla_data(data[IFLA_VLAN_FLAGS]);
62 if ((flags->flags & flags->mask) &
63 ~(VLAN_FLAG_REORDER_HDR | VLAN_FLAG_GVRP))
63 ~(VLAN_FLAG_REORDER_HDR | VLAN_FLAG_GVRP |
64 VLAN_FLAG_LOOSE_BINDING))
64 return -EINVAL;
65 }
66
67 err = vlan_validate_qos_map(data[IFLA_VLAN_INGRESS_QOS]);
68 if (err < 0)
69 return err;
70 err = vlan_validate_qos_map(data[IFLA_VLAN_EGRESS_QOS]);
71 if (err < 0)

--- 42 unchanged lines hidden (view full) ---

114 if (!real_dev)
115 return -ENODEV;
116
117 *num_tx_queues = real_dev->num_tx_queues;
118 *real_num_tx_queues = real_dev->real_num_tx_queues;
119 return 0;
120}
121
65 return -EINVAL;
66 }
67
68 err = vlan_validate_qos_map(data[IFLA_VLAN_INGRESS_QOS]);
69 if (err < 0)
70 return err;
71 err = vlan_validate_qos_map(data[IFLA_VLAN_EGRESS_QOS]);
72 if (err < 0)

--- 42 unchanged lines hidden (view full) ---

115 if (!real_dev)
116 return -ENODEV;
117
118 *num_tx_queues = real_dev->num_tx_queues;
119 *real_num_tx_queues = real_dev->real_num_tx_queues;
120 return 0;
121}
122
122static int vlan_newlink(struct net_device *dev,
123static int vlan_newlink(struct net *src_net, struct net_device *dev,
123 struct nlattr *tb[], struct nlattr *data[])
124{
125 struct vlan_dev_info *vlan = vlan_dev_info(dev);
126 struct net_device *real_dev;
127 int err;
128
129 if (!data[IFLA_VLAN_ID])
130 return -EINVAL;
131
132 if (!tb[IFLA_LINK])
133 return -EINVAL;
124 struct nlattr *tb[], struct nlattr *data[])
125{
126 struct vlan_dev_info *vlan = vlan_dev_info(dev);
127 struct net_device *real_dev;
128 int err;
129
130 if (!data[IFLA_VLAN_ID])
131 return -EINVAL;
132
133 if (!tb[IFLA_LINK])
134 return -EINVAL;
134 real_dev = __dev_get_by_index(dev_net(dev), nla_get_u32(tb[IFLA_LINK]));
135 real_dev = __dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK]));
135 if (!real_dev)
136 return -ENODEV;
137
138 vlan->vlan_id = nla_get_u16(data[IFLA_VLAN_ID]);
139 vlan->real_dev = real_dev;
140 vlan->flags = VLAN_FLAG_REORDER_HDR;
141
142 err = vlan_check_real_dev(real_dev, vlan->vlan_id);

--- 117 unchanged lines hidden ---
136 if (!real_dev)
137 return -ENODEV;
138
139 vlan->vlan_id = nla_get_u16(data[IFLA_VLAN_ID]);
140 vlan->real_dev = real_dev;
141 vlan->flags = VLAN_FLAG_REORDER_HDR;
142
143 err = vlan_check_real_dev(real_dev, vlan->vlan_id);

--- 117 unchanged lines hidden ---