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:
parent
634408e0c5
commit
a7aa2d3cab
1
NEWS
1
NEWS
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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">
|
||||
|
Loading…
x
Reference in New Issue
Block a user