2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-22 01:51:26 +00:00

cfm: Support high priority CCM broadcasts.

Bug #9015.
Signed-off-by: Ethan Jackson <ethan@nicira.com>
This commit is contained in:
Ethan Jackson 2012-02-02 15:48:13 -08:00
parent 634408e0c5
commit a7aa2d3cab
5 changed files with 18 additions and 2 deletions

1
NEWS
View File

@ -26,6 +26,7 @@ post-v1.5.0
- ovsdb-client:
- The new option --timestamp causes the "monitor" command to print
a timestamp with every update.
- CFM module CCM broadcasts can now be tagged with an 802.1p priority.
v1.5.0 - xx xxx xxxx

View File

@ -97,6 +97,7 @@ struct cfm {
uint8_t ccm_interval; /* The CCM transmission interval. */
int ccm_interval_ms; /* 'ccm_interval' in milliseconds. */
uint16_t ccm_vlan; /* Vlan tag of CCM PDUs. */
uint8_t ccm_pcp; /* Priority of CCM PDUs. */
uint8_t maid[CCM_MAID_LEN]; /* The MAID of this CFM. */
struct timer tx_timer; /* Send CCM when expired. */
@ -361,8 +362,9 @@ cfm_compose_ccm(struct cfm *cfm, struct ofpbuf *packet,
timer_set_duration(&cfm->tx_timer, cfm->ccm_interval_ms);
eth_compose(packet, cfm_ccm_addr(cfm), eth_src, ETH_TYPE_CFM, sizeof *ccm);
if (cfm->ccm_vlan) {
eth_push_vlan(packet, htons(cfm->ccm_vlan));
if (cfm->ccm_vlan || cfm->ccm_pcp) {
uint16_t tci = cfm->ccm_vlan | (cfm->ccm_pcp << VLAN_PCP_SHIFT);
eth_push_vlan(packet, htons(tci));
}
ccm = packet->l3;
@ -420,6 +422,7 @@ cfm_configure(struct cfm *cfm, const struct cfm_settings *s)
interval_ms = ccm_interval_to_ms(interval);
cfm->ccm_vlan = s->ccm_vlan & VLAN_VID_MASK;
cfm->ccm_pcp = s->ccm_pcp & (VLAN_PCP_MASK >> VLAN_PCP_SHIFT);
if (cfm->extended && interval_ms != s->interval) {
interval = 0;
interval_ms = MIN(s->interval, UINT16_MAX);

View File

@ -30,6 +30,7 @@ struct cfm_settings {
bool extended; /* Run in extended mode. */
bool opup; /* Operational State. */
uint16_t ccm_vlan; /* CCM Vlan tag. Zero if none. */
uint8_t ccm_pcp; /* CCM Priority. Zero if none. */
};
void cfm_init(void);

View File

@ -3218,6 +3218,8 @@ iface_configure_cfm(struct iface *iface)
"0"));
s.ccm_vlan = atoi(get_interface_other_config(iface->cfg, "cfm_ccm_vlan",
"0"));
s.ccm_pcp = atoi(get_interface_other_config(iface->cfg, "cfm_ccm_pcp",
"0"));
if (s.interval <= 0) {
s.interval = 1000;
}

View File

@ -1742,6 +1742,15 @@
with the given value.
</column>
<column name="other_config" key="cfm_ccm_pcp"
type='{"type": "integer", "minInteger": 1, "maxInteger": 7}'>
When set, the CFM module will apply a VLAN tag to all CCMs it generates
with the given PCP value. The VLAN ID of the tag is governed by the
value of <ref column="other_config" key="cfm_ccm_vlan"/>. If
<ref column="other_config" key="cfm_ccm_vlan"/> is unset, a VLAN ID of
zero is used.
</column>
</group>
<group title="Bonding Configuration">