[ovs-dev] [cfm 5/7] cfm: Remove packet definition from CFM header file.

Ethan Jackson ethan at nicira.com
Fri May 20 01:53:24 UTC 2011


This patch makes a stylistic improvement by removing CFM protocol
information from cfm.h.  In the process it changes
cfm_compose_ccm() to populate an ofpbuf instead of a struct ccm.
---
 lib/cfm.c              |   32 +++++++++++++++++++++++++++++---
 lib/cfm.h              |   35 +----------------------------------
 ofproto/ofproto-dpif.c |    5 +----
 3 files changed, 31 insertions(+), 41 deletions(-)

diff --git a/lib/cfm.c b/lib/cfm.c
index c2c799d..c65cca7 100644
--- a/lib/cfm.c
+++ b/lib/cfm.c
@@ -36,7 +36,28 @@
 
 VLOG_DEFINE_THIS_MODULE(cfm);
 
-#define CCM_OPCODE 1              /* CFM message opcode meaning CCM. */
+/* Ethernet destination address of CCM packets. */
+static const uint8_t eth_addr_ccm[6] = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x30 };
+
+#define ETH_TYPE_CFM 0x8902
+
+/* A 'ccm' represents a Continuity Check Message from the 802.1ag
+ * specification.  Continuity Check Messages are broadcast periodically so that
+ * hosts can determine whom they have connectivity to. */
+#define CCM_LEN 74
+#define CCM_MAID_LEN 48
+#define CCM_OPCODE 1 /* CFM message opcode meaning CCM. */
+struct ccm {
+    uint8_t  mdlevel_version; /* MD Level and Version */
+    uint8_t  opcode;
+    uint8_t  flags;
+    uint8_t  tlv_offset;
+    ovs_be32 seq;
+    ovs_be16 mpid;
+    uint8_t  maid[CCM_MAID_LEN];
+    uint8_t  zero[16]; /* Defined by ITU-T Y.1731 should be zero */
+} __attribute__((packed));
+BUILD_ASSERT_DECL(CCM_LEN == sizeof(struct ccm));
 
 struct cfm {
     uint16_t mpid;
@@ -250,13 +271,18 @@ cfm_should_send_ccm(struct cfm *cfm)
     return timer_expired(&cfm->tx_timer);
 }
 
-/* Composes a CCM message into 'ccm'.  Messages generated with this function
+/* Composes a CCM message into 'packet'.  Messages generated with this function
  * should be sent whenever cfm_should_send_ccm() indicates. */
 void
-cfm_compose_ccm(struct cfm *cfm, struct ccm *ccm)
+cfm_compose_ccm(struct cfm *cfm, struct ofpbuf *packet,
+                uint8_t eth_src[ETH_ADDR_LEN])
 {
+    struct ccm *ccm;
+
     timer_set_duration(&cfm->tx_timer, cfm->ccm_interval_ms);
 
+    ccm = eth_compose(packet, eth_addr_ccm, eth_src, ETH_TYPE_CFM,
+                      sizeof *ccm);
     ccm->mdlevel_version = 0;
     ccm->opcode = CCM_OPCODE;
     ccm->tlv_offset = 70;
diff --git a/lib/cfm.h b/lib/cfm.h
index 02f50d5..85e9ddb 100644
--- a/lib/cfm.h
+++ b/lib/cfm.h
@@ -24,29 +24,6 @@
 struct flow;
 struct ofpbuf;
 
-/* Ethernet destination address of CCM packets. */
-static const uint8_t eth_addr_ccm[6] OVS_UNUSED
-    = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x30 };
-
-#define ETH_TYPE_CFM 0x8902
-
-/* A 'ccm' represents a Continuity Check Message from the 802.1ag
- * specification.  Continuity Check Messages are broadcast periodically so that
- * hosts can determine who they have connectivity to. */
-#define CCM_LEN 74
-#define CCM_MAID_LEN 48
-struct ccm {
-    uint8_t  mdlevel_version; /* MD Level and Version */
-    uint8_t  opcode;
-    uint8_t  flags;
-    uint8_t  tlv_offset;
-    ovs_be32 seq;
-    ovs_be16 mpid;
-    uint8_t  maid[CCM_MAID_LEN];
-    uint8_t  zero[16]; /* Defined by ITU-T Y.1731 should be zero */
-} __attribute__((packed));
-BUILD_ASSERT_DECL(CCM_LEN == sizeof(struct ccm));
-
 struct cfm_settings {
     uint16_t mpid;              /* The MPID of this CFM. */
     int interval;               /* The requested transmission interval. */
@@ -57,25 +34,15 @@ struct cfm_settings {
 };
 
 void cfm_init(void);
-
 struct cfm *cfm_create(void);
-
 void cfm_destroy(struct cfm *);
-
 void cfm_run(struct cfm *);
-
 bool cfm_should_send_ccm(struct cfm *);
-
-void cfm_compose_ccm(struct cfm *, struct ccm *);
-
+void cfm_compose_ccm(struct cfm *, struct ofpbuf *packet, uint8_t eth_src[6]);
 void cfm_wait(struct cfm *);
-
 bool cfm_configure(struct cfm *, const struct cfm_settings *);
-
 bool cfm_should_process_flow(const struct flow *);
-
 void cfm_process_heartbeat(struct cfm *, const struct ofpbuf *packet);
-
 bool cfm_get_fault(const struct cfm *);
 
 #endif /* cfm.h */
diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 002f7f1..da3c465 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -1379,12 +1379,9 @@ port_run(struct ofport_dpif *ofport)
 
         if (cfm_should_send_ccm(ofport->cfm)) {
             struct ofpbuf packet;
-            struct ccm *ccm;
 
             ofpbuf_init(&packet, 0);
-            ccm = eth_compose(&packet, eth_addr_ccm, ofport->up.opp.hw_addr,
-                              ETH_TYPE_CFM, sizeof *ccm);
-            cfm_compose_ccm(ofport->cfm, ccm);
+            cfm_compose_ccm(ofport->cfm, &packet, ofport->up.opp.hw_addr);
             send_packet(ofproto_dpif_cast(ofport->up.ofproto),
                         ofport->odp_port, &packet);
             ofpbuf_uninit(&packet);
-- 
1.7.4.4




More information about the dev mailing list