Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 103255
b: refs/heads/master
c: b3ce032
h: refs/heads/master
i:
  103253: 4945882
  103251: 09399c7
  103247: 3a65fe2
v: v3
  • Loading branch information
Patrick McHardy authored and David S. Miller committed Jul 6, 2008
1 parent d719cdd commit a88f34a
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: eca9ebac651f774d8b10fce7c5d173c3c3d3394f
refs/heads/master: b3ce0325f2bf1bb737cb8fc7c349ce8fefdd9e40
6 changes: 3 additions & 3 deletions trunk/net/8021q/vlan.c
Original file line number Diff line number Diff line change
Expand Up @@ -591,9 +591,9 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg)
err = -EPERM;
if (!capable(CAP_NET_ADMIN))
break;
err = vlan_dev_set_vlan_flag(dev,
args.u.flag,
args.vlan_qos);
err = vlan_dev_change_flags(dev,
args.vlan_qos ? args.u.flag : 0,
args.u.flag);
break;

case SET_VLAN_NAME_TYPE_CMD:
Expand Down
3 changes: 1 addition & 2 deletions trunk/net/8021q/vlan.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ void vlan_dev_set_ingress_priority(const struct net_device *dev,
u32 skb_prio, short vlan_prio);
int vlan_dev_set_egress_priority(const struct net_device *dev,
u32 skb_prio, short vlan_prio);
int vlan_dev_set_vlan_flag(const struct net_device *dev,
u32 flag, short flag_val);
int vlan_dev_change_flags(const struct net_device *dev, u32 flag, u32 mask);
void vlan_dev_get_realdev_name(const struct net_device *dev, char *result);
void vlan_dev_get_vid(const struct net_device *dev, unsigned short *result);

Expand Down
20 changes: 9 additions & 11 deletions trunk/net/8021q/vlan_dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -507,18 +507,16 @@ int vlan_dev_set_egress_priority(const struct net_device *dev,
}

/* Flags are defined in the vlan_flags enum in include/linux/if_vlan.h file. */
int vlan_dev_set_vlan_flag(const struct net_device *dev,
u32 flag, short flag_val)
int vlan_dev_change_flags(const struct net_device *dev, u32 flags, u32 mask)
{
/* verify flag is supported */
if (flag == VLAN_FLAG_REORDER_HDR) {
if (flag_val)
vlan_dev_info(dev)->flags |= VLAN_FLAG_REORDER_HDR;
else
vlan_dev_info(dev)->flags &= ~VLAN_FLAG_REORDER_HDR;
return 0;
}
return -EINVAL;
struct vlan_dev_info *vlan = vlan_dev_info(dev);
u32 old_flags = vlan->flags;

if (mask & ~VLAN_FLAG_REORDER_HDR)
return -EINVAL;

vlan->flags = (old_flags & ~mask) | (flags & mask);
return 0;
}

void vlan_dev_get_realdev_name(const struct net_device *dev, char *result)
Expand Down
4 changes: 1 addition & 3 deletions trunk/net/8021q/vlan_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,16 +75,14 @@ static int vlan_validate(struct nlattr *tb[], struct nlattr *data[])
static int vlan_changelink(struct net_device *dev,
struct nlattr *tb[], struct nlattr *data[])
{
struct vlan_dev_info *vlan = vlan_dev_info(dev);
struct ifla_vlan_flags *flags;
struct ifla_vlan_qos_mapping *m;
struct nlattr *attr;
int rem;

if (data[IFLA_VLAN_FLAGS]) {
flags = nla_data(data[IFLA_VLAN_FLAGS]);
vlan->flags = (vlan->flags & ~flags->mask) |
(flags->flags & flags->mask);
vlan_dev_change_flags(dev, flags->flags, flags->mask);
}
if (data[IFLA_VLAN_INGRESS_QOS]) {
nla_for_each_nested(attr, data[IFLA_VLAN_INGRESS_QOS], rem) {
Expand Down

0 comments on commit a88f34a

Please sign in to comment.