Hi, Roopa,

Two minor comments:

The parameter br is not used in the br_add_vlan_tunnel_info() method, it should 
be removed:

+static int br_add_vlan_tunnel_info(struct net_bridge *br,
+                                  struct net_bridge_port *p, int cmd,
+                                  u16 vid, u32 tun_id)
+{
+       int err;
+
+       switch (cmd) {
+       case RTM_SETLINK:
+               if (p) {
+                       /* if the MASTER flag is set this will act on the global
+                        * per-VLAN entry as well
+                        */
+                       err = nbp_vlan_tunnel_info_add(p, vid, tun_id);
+                       if (err)
+                               break;
+               } else {
+                       return -EINVAL;
+               }
+
+               break;
+
+       case RTM_DELLINK:
+               if (p)
+                       nbp_vlan_tunnel_info_delete(p, vid);
+               else
+                       return -EINVAL;
+               break;
+       }
+
+       return 0;
+}
+

The parameter br is used inside br_process_vlan_tunnel_info() only in the two 
Cases, when br_add_vlan_tunnel_info() is invoked. Since we saw earlier that it 
should be removed from br_add_vlan_tunnel_info(), it should also be removed 
from br_process_vlan_tunnel_info() as it is not needed anymore:

+static int br_process_vlan_tunnel_info(struct net_bridge *br,
+                                      struct net_bridge_port *p, int cmd,
+                                      struct vtunnel_info *tinfo_curr,
+                                      struct vtunnel_info *tinfo_last) {
+       int t, v;
+       int err;
+
+       if (tinfo_curr->flags & BRIDGE_VLAN_INFO_RANGE_BEGIN) {
+               if (tinfo_last->flags & BRIDGE_VLAN_INFO_RANGE_BEGIN)
+                       return -EINVAL;
+               memcpy(tinfo_last, tinfo_curr, sizeof(struct vtunnel_info));
+       } else if (tinfo_curr->flags & BRIDGE_VLAN_INFO_RANGE_END) {
+               if (!(tinfo_last->flags & BRIDGE_VLAN_INFO_RANGE_BEGIN))
+                       return -EINVAL;
+               if ((tinfo_curr->vid - tinfo_last->vid) !=
+                   (tinfo_curr->tunid - tinfo_last->tunid))
+                       return -EINVAL;
+               /* XXX: tun id and vlan id attrs must be same
+                */
+               t = tinfo_last->tunid;
+               for (v = tinfo_last->vid; v <= tinfo_curr->vid; v++) {
+                       err = br_add_vlan_tunnel_info(br, p, cmd,
+                                                         v, t);
+                       if (err)
+                               return err;
+                       t++;
+               }
+               memset(tinfo_last, 0, sizeof(struct vtunnel_info));
+               memset(tinfo_curr, 0, sizeof(struct vtunnel_info));
+       } else {
+               err = br_add_vlan_tunnel_info(br, p, cmd,
+                                             tinfo_curr->vid,
+                                             tinfo_curr->tunid);
+               if (err)
+                       return err;
+       }
+
+       return 0;
+}
+

Regards,
Rami Rosen

Reply via email to