netdev-dpdk: fix mbuf leaks
[cascardo/ovs.git] / lib / rstp-common.h
index 0da1b56..7bbee4d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2014 M3S, Srl - Italy
+ * Copyright (c) 2011-2015 M3S, Srl - Italy
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@
  * Authors:
  *         Martino Fornasa <mf@fornasa.it>
  *         Daniele Venturino <daniele.venturino@m3s.it>
+ *         Carlo Andreotti <c.andreotti@m3s.it>
  *
  * References to IEEE 802.1D-2004 standard are enclosed in square brackets.
  * E.g. [17.3], [Table 17-1], etc.
@@ -32,6 +33,7 @@
 #include "rstp.h"
 #include <stdbool.h>
 #include <stdint.h>
+#include "hmap.h"
 #include "list.h"
 #include "ovs-atomic.h"
 #include "packets.h"
@@ -140,7 +142,7 @@ enum port_role_transition_state_machine {
     PORT_ROLE_TRANSITION_SM_DESIGNATED_DISCARD_EXEC,
     PORT_ROLE_TRANSITION_SM_ALTERNATE_PORT_EXEC,
     PORT_ROLE_TRANSITION_SM_ALTERNATE_PORT,
-    PORT_ROLE_TRANSITION_SM_ALTERNATE_AGREED,
+    PORT_ROLE_TRANSITION_SM_ALTERNATE_AGREED_EXEC,
     PORT_ROLE_TRANSITION_SM_ALTERNATE_PROPOSED_EXEC,
     PORT_ROLE_TRANSITION_SM_BLOCK_PORT_EXEC,
     PORT_ROLE_TRANSITION_SM_BLOCK_PORT,
@@ -224,27 +226,21 @@ enum rstp_bpdu_flag {
 OVS_PACKED(
 struct rstp_bpdu {
     ovs_be16 protocol_identifier;
-    uint8_t  protocol_version_identifier;
-    uint8_t  bpdu_type;
-    uint8_t  flags;
+    uint8_t protocol_version_identifier;
+    uint8_t bpdu_type;
+    uint8_t flags;
     ovs_be64 root_bridge_id;
     ovs_be32 root_path_cost;
     ovs_be64 designated_bridge_id;
     ovs_be16 designated_port_id;
-    ovs_be16  message_age;
-    ovs_be16  max_age;
-    ovs_be16  hello_time;
-    ovs_be16  forward_delay;
-    uint8_t  version1_length;
-    uint8_t  padding[7];
+    ovs_be16 message_age;
+    ovs_be16 max_age;
+    ovs_be16 hello_time;
+    ovs_be16 forward_delay;
+    uint8_t version1_length;
+    uint8_t padding[7];
 });
 
-enum rstp_admin_point_to_point_mac_state {
-    RSTP_ADMIN_P2P_MAC_FORCE_TRUE,
-    RSTP_ADMIN_P2P_MAC_FORCE_FALSE,
-    RSTP_ADMIN_P2P_MAC_FORCE_AUTO
-};
-
 enum rstp_info_is {
     INFO_IS_DISABLED,
     INFO_IS_RECEIVED,
@@ -264,7 +260,7 @@ struct rstp_port {
     struct ovs_refcount ref_cnt;
 
     struct rstp *rstp OVS_GUARDED_BY(rstp_mutex);
-    struct list node OVS_GUARDED_BY(rstp_mutex); /* Node in rstp->ports list. */
+    struct hmap_node node OVS_GUARDED_BY(rstp_mutex); /* In rstp->ports. */
     void *aux OVS_GUARDED_BY(rstp_mutex);
     struct rstp_bpdu received_bpdu_buffer OVS_GUARDED_BY(rstp_mutex);
     /*************************************************************************
@@ -710,7 +706,7 @@ struct rstp_port {
 };
 
 struct rstp {
-    struct list node OVS_GUARDED_BY(rstp_mutex);   /* In rstp instances list */
+    struct ovs_list node OVS_GUARDED_BY(rstp_mutex);   /* In rstp instances list */
     char *name;     /* Bridge name. */
 
     /* Changes in last SM execution. */
@@ -866,13 +862,17 @@ struct rstp {
     bool stp_version OVS_GUARDED_BY(rstp_mutex);
 
     /* Ports */
-    struct list ports OVS_GUARDED_BY(rstp_mutex);
+    struct hmap ports OVS_GUARDED_BY(rstp_mutex);
 
     struct ovs_refcount ref_cnt;
 
     /* Interface to client. */
-    void (*send_bpdu)(struct ofpbuf *bpdu, void *port_aux, void *rstp_aux);
+    void (*send_bpdu)(struct dp_packet *bpdu, void *port_aux, void *rstp_aux);
     void *aux;
+
+    bool root_changed;
+    void *old_root_aux;
+    void *new_root_aux;
 };
 
 #endif /* rstp-common.h */