mirror of
https://github.com/openvswitch/ovs
synced 2025-10-27 15:18:06 +00:00
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.
This commit is contained in:
32
lib/cfm.c
32
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;
|
||||
|
||||
35
lib/cfm.h
35
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 */
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user