From: Ethan Jackson Date: Sat, 14 May 2011 01:11:43 +0000 (-0700) Subject: cfm: Remove packet definition from CFM header file. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c0a2e71d110ad2af474232e03ea9ad94cbbae46f;p=openvswitch cfm: Remove packet definition from CFM header file. 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. --- diff --git a/lib/cfm.c b/lib/cfm.c index 85af22c4..46481507 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; @@ -249,13 +270,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 02f50d5f..85e9ddbf 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 0e55f0c4..419e8240 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -1375,12 +1375,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);