On Sat, May 31, 2014 at 01:53:15AM -0300, Flavio Leitner wrote:
> This patch adds generic IGMP snooping library code
> that is used in follow-up patches.
> 
> Signed-off-by: Cong Wang <amw...@redhat.com>
> Signed-off-by: Daniel Borkmann <dbork...@redhat.com>
> Acked-by: Thomas Graf <tg...@redhat.com>
> Signed-off-by: Flavio Leitner <f...@redhat.com>

Thanks for the revision!

In mcast_snooping_prune_expired(), I think that we can "break" out of
the loop after we reach a bundle that has not expired (the list is
sorted on expiration time, right?).

MCAST_MROUTER_PORT_DEFAULT_IDLE_TIME is actually the fixed idle time
that is always used, so I would consider removing "default" from its
name.

My remaining comments are stylistic.  I think it's easiest to just
suggest folding in the following incremental patch; let me know if
some of them don't make sense.

diff --git a/lib/mcast-snooping.c b/lib/mcast-snooping.c
index 0bf5195..8416753 100644
--- a/lib/mcast-snooping.c
+++ b/lib/mcast-snooping.c
@@ -40,7 +40,8 @@ COVERAGE_DEFINE(mcast_snooping_expired);
 
 static struct mcast_mrouter_bundle *
 mcast_snooping_mrouter_lookup(struct mcast_snooping *ms, uint16_t vlan,
-                              void *port);
+                              void *port)
+    OVS_REQ_RDLOCK(ms->rwlock);
 
 bool
 mcast_snooping_enabled(const struct mcast_snooping *ms)
@@ -57,10 +58,7 @@ mcast_snooping_flood_unreg(const struct mcast_snooping *ms)
 bool
 mcast_snooping_is_query(ovs_be16 igmp_type)
 {
-    if (igmp_type == htons(IGMP_HOST_MEMBERSHIP_QUERY)) {
-        return true;
-    }
-    return false;
+    return igmp_type == htons(IGMP_HOST_MEMBERSHIP_QUERY);
 }
 
 bool
@@ -75,8 +73,8 @@ mcast_snooping_is_membership(ovs_be16 igmp_type)
     return false;
 }
 
-/* Returns the number of seconds since the multicast group
- * was learned in a port  */
+/* Returns the number of seconds since multicast group 'b' was learned in a
+ * port on 'ms'. */
 int
 mcast_bundle_age(const struct mcast_snooping *ms,
                  const struct mcast_group_bundle *b)
@@ -89,7 +87,7 @@ static uint32_t
 mcast_table_hash(const struct mcast_snooping *ms, ovs_be32 grp_ip4,
                  uint16_t vlan)
 {
-    return hash_3words(ntohl(grp_ip4), vlan, ms->secret);
+    return hash_3words((OVS_FORCE uint32_t) grp_ip4, vlan, ms->secret);
 }
 
 static struct mcast_group_bundle *
@@ -105,7 +103,7 @@ mcast_group_from_lru_node(struct list *list)
 }
 
 /* Searches 'ms' for and returns an mcast group for destination address
- * 'dip' in 'vlan' */
+ * 'dip' in 'vlan'. */
 struct mcast_group *
 mcast_snooping_lookup(const struct mcast_snooping *ms, ovs_be32 dip,
                       uint16_t vlan)
@@ -148,7 +146,7 @@ normalize_idle_time(unsigned int idle_time)
 }
 
 /* Creates and returns a new mcast table with an initial mcast aging
- * timeout of 'idle_time' seconds and an initial maximum of
+ * timeout of MCAST_ENTRY_DEFAULT_IDLE_TIME seconds and an initial maximum of
  * MCAST_DEFAULT_MAX entries. */
 struct mcast_snooping *
 mcast_snooping_create(void)
@@ -198,8 +196,7 @@ mcast_snooping_unref(struct mcast_snooping *ms)
 
 /* Changes the mcast aging timeout of 'ms' to 'idle_time' seconds. */
 void
-mcast_snooping_set_idle_time(struct mcast_snooping *ms,
-                             unsigned int idle_time)
+mcast_snooping_set_idle_time(struct mcast_snooping *ms, unsigned int idle_time)
     OVS_REQ_WRLOCK(ms->rwlock)
 {
     struct mcast_group *grp;
@@ -233,8 +230,8 @@ mcast_snooping_set_max_entries(struct mcast_snooping *ms,
 /* Sets if unregistered multicast packets should be flooded to
  * all ports or only to ports connected to multicast routers
  *
- * return true if previous state differs from current state
- * return false otherwise. */
+ * Returns true if previous state differs from current state,
+ * false otherwise. */
 bool
 mcast_snooping_set_flood_unreg(struct mcast_snooping *ms, bool enable)
     OVS_REQ_WRLOCK(ms->rwlock)
@@ -282,8 +279,8 @@ mcast_group_insert_bundle(struct mcast_snooping *ms 
OVS_UNUSED,
     return b;
 }
 
-/* Return true if multicast still has bundles associated
- * Return false if there is no bundles */
+/* Return true if multicast still has bundles associated.
+ * Return false if there is no bundles. */
 static bool
 mcast_group_has_bundles(struct mcast_group *grp)
 {
@@ -291,7 +288,7 @@ mcast_group_has_bundles(struct mcast_group *grp)
 }
 
 /* Delete 'grp' from the 'ms' hash table.
- * Caller is responsible to clean bundle lru first */
+ * Caller is responsible to clean bundle lru first. */
 static void
 mcast_snooping_flush_group__(struct mcast_snooping *ms,
                              struct mcast_group *grp)
@@ -318,8 +315,8 @@ mcast_snooping_flush_group(struct mcast_snooping *ms, 
struct mcast_group *grp)
 }
 
 
-/* Delete bundle returning true if it succeed
- * false if it didn't find the group */
+/* Delete bundle returning true if it succeeds,
+ * false if it didn't find the group. */
 static bool
 mcast_group_delete_bundle(struct mcast_snooping *ms OVS_UNUSED,
                           struct mcast_group *grp, void *port)
@@ -337,7 +334,8 @@ mcast_group_delete_bundle(struct mcast_snooping *ms 
OVS_UNUSED,
     return false;
 }
 
-/* check if any bundle has expired and delete it */
+/* If any bundle has expired, delete it.  Returns the number of deleted
+ * bundles. */
 static int
 mcast_snooping_prune_expired(struct mcast_snooping *ms,
                              struct mcast_group *grp)
@@ -372,14 +370,14 @@ mcast_snooping_prune_expired(struct mcast_snooping *ms,
  * move to the last position in the LRU list.
  */
 bool
-mcast_snooping_add_group(struct mcast_snooping *ms, ovs_be32 ip4, uint16_t 
vlan,
-                         void *port)
+mcast_snooping_add_group(struct mcast_snooping *ms, ovs_be32 ip4,
+                         uint16_t vlan, void *port)
     OVS_REQ_WRLOCK(ms->rwlock)
 {
     bool learned;
     struct mcast_group *grp;
 
-    /* avoid duplicate packets */
+    /* Avoid duplicate packets. */
     if (mcast_snooping_mrouter_lookup(ms, vlan, port)
         || mcast_snooping_fport_lookup(ms, vlan, port)) {
         return false;
@@ -407,6 +405,7 @@ mcast_snooping_add_group(struct mcast_snooping *ms, 
ovs_be32 ip4, uint16_t vlan,
         list_remove(&grp->group_node);
     }
     mcast_group_insert_bundle(ms, grp, port, ms->idle_time);
+
     /* Mark 'grp' as recently used. */
     list_push_back(&ms->group_lru, &grp->group_node);
     return learned;
@@ -428,10 +427,10 @@ mcast_snooping_leave_group(struct mcast_snooping *ms, 
ovs_be32 ip4,
 }
 
 
-/* Router ports */
+/* Router ports. */
 
 /* Returns the number of seconds since the multicast router
- * was learned in a port  */
+ * was learned in a port. */
 int
 mcast_mrouter_age(const struct mcast_snooping *ms OVS_UNUSED,
                   const struct mcast_mrouter_bundle *mrouter)
@@ -485,7 +484,7 @@ mcast_snooping_add_mrouter(struct mcast_snooping *ms, 
uint16_t vlan,
 {
     struct mcast_mrouter_bundle *mrouter;
 
-    /* avoid duplicate packets */
+    /* Avoid duplicate packets. */
     if (mcast_snooping_fport_lookup(ms, vlan, port)) {
         return false;
     }
@@ -512,9 +511,8 @@ mcast_snooping_flush_mrouter(struct mcast_mrouter_bundle 
*mrouter)
     list_remove(&mrouter->mrouter_node);
     free(mrouter);
 }
-
 
-/* Flood ports */
+/* Flood ports. */
 
 static struct mcast_fport_bundle *
 mcast_fport_from_list_node(struct list *list)
@@ -582,16 +580,14 @@ mcast_snooping_set_port_flood(struct mcast_snooping *ms, 
uint16_t vlan,
     if (flood && !fport) {
         mcast_snooping_add_fport(ms, vlan, port);
         ms->need_revalidate = true;
-    }
-
-    if (!flood && fport) {
+    } else if (!flood && fport) {
         mcast_snooping_flush_fport(fport);
         ms->need_revalidate = true;
     }
 }
-
 
-/* Run and Flush */
+/* Run and flush. */
+
 static void
 mcast_snooping_mdb_flush__(struct mcast_snooping *ms)
     OVS_REQ_WRLOCK(ms->rwlock)
@@ -599,13 +595,13 @@ mcast_snooping_mdb_flush__(struct mcast_snooping *ms)
     struct mcast_group *grp;
     struct mcast_mrouter_bundle *mrouter;
 
-    while (group_get_lru(ms, &grp)){
+    while (group_get_lru(ms, &grp)) {
         mcast_snooping_flush_group(ms, grp);
     }
 
     hmap_shrink(&ms->table);
 
-    while (mrouter_get_lru(ms, &mrouter)){
+    while (mrouter_get_lru(ms, &mrouter)) {
         mcast_snooping_flush_mrouter(mrouter);
     }
 }
@@ -622,7 +618,7 @@ mcast_snooping_mdb_flush(struct mcast_snooping *ms)
     ovs_rwlock_unlock(&ms->rwlock);
 }
 
-/* flushes mdb and flood ports */
+/* Flushes mdb and flood ports. */
 static void
 mcast_snooping_flush__(struct mcast_snooping *ms)
     OVS_REQ_WRLOCK(ms->rwlock)
@@ -631,17 +627,17 @@ mcast_snooping_flush__(struct mcast_snooping *ms)
     struct mcast_mrouter_bundle *mrouter;
     struct mcast_fport_bundle *fport;
 
-    while (group_get_lru(ms, &grp)){
+    while (group_get_lru(ms, &grp)) {
         mcast_snooping_flush_group(ms, grp);
     }
 
     hmap_shrink(&ms->table);
 
-    while (mrouter_get_lru(ms, &mrouter)){
+    while (mrouter_get_lru(ms, &mrouter)) {
         mcast_snooping_flush_mrouter(mrouter);
     }
 
-    while (fport_get(ms, &fport)){
+    while (fport_get(ms, &fport)) {
         mcast_snooping_flush_fport(fport);
     }
 }
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to