Skip to content

Commit 115efe8

Browse files
authored
[bfdorch] add default TOS value for BFD session (sonic-net#2689)
What I did Add default TOS value when create BFD session, default DSCP value is 46, default ECN is 0. The BFD session configuration will override this default value. Why I did it Higher DSCP value is preferred for BFD packet. How I verified it Set different TOS value in BFD session configuration, and create BFD session in DUT. Load the test image with the design change, connect a traffic generator (with BFD protocol support), capture the packet sent out by DUT, check the DSCP and ECN field in the captured packet.
1 parent a198289 commit 115efe8

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

orchagent/bfdorch.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ using namespace swss;
1414
#define BFD_SESSION_DEFAULT_TX_INTERVAL 1000
1515
#define BFD_SESSION_DEFAULT_RX_INTERVAL 1000
1616
#define BFD_SESSION_DEFAULT_DETECT_MULTIPLIER 10
17+
// TOS: default 6-bit DSCP value 48, default 2-bit ecn value 0. 48<<2 = 192
18+
#define BFD_SESSION_DEFAULT_TOS 192
1719
#define BFD_SESSION_MILLISECOND_TO_MICROSECOND 1000
1820
#define BFD_SRCPORTINIT 49152
1921
#define BFD_SRCPORTMAX 65536
@@ -243,6 +245,7 @@ bool BfdOrch::create_bfd_session(const string& key, const vector<FieldValueTuple
243245
uint32_t tx_interval = BFD_SESSION_DEFAULT_TX_INTERVAL;
244246
uint32_t rx_interval = BFD_SESSION_DEFAULT_RX_INTERVAL;
245247
uint8_t multiplier = BFD_SESSION_DEFAULT_DETECT_MULTIPLIER;
248+
uint8_t tos = BFD_SESSION_DEFAULT_TOS;
246249
bool multihop = false;
247250
MacAddress dst_mac;
248251
bool dst_mac_provided = false;
@@ -291,6 +294,10 @@ bool BfdOrch::create_bfd_session(const string& key, const vector<FieldValueTuple
291294
dst_mac = MacAddress(value);
292295
dst_mac_provided = true;
293296
}
297+
else if (fvField(i) == "tos")
298+
{
299+
tos = to_uint<uint8_t>(value);
300+
}
294301
else
295302
SWSS_LOG_ERROR("Unsupported BFD attribute %s\n", fvField(i).c_str());
296303
}
@@ -352,6 +359,10 @@ bool BfdOrch::create_bfd_session(const string& key, const vector<FieldValueTuple
352359
attrs.emplace_back(attr);
353360
fvVector.emplace_back("multiplier", to_string(multiplier));
354361

362+
attr.id = SAI_BFD_SESSION_ATTR_TOS;
363+
attr.value.u8 = tos;
364+
attrs.emplace_back(attr);
365+
355366
if (multihop)
356367
{
357368
attr.id = SAI_BFD_SESSION_ATTR_MULTIHOP;

tests/test_bfd.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def test_addRemoveBfdSession(self, dvs):
4949
bfdSessions = self.get_exist_bfd_session()
5050

5151
# Create BFD session
52-
fieldValues = {"local_addr": "10.0.0.1"}
52+
fieldValues = {"local_addr": "10.0.0.1","tos":"64"}
5353
self.create_bfd_session("default:default:10.0.0.2", fieldValues)
5454
self.adb.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_BFD_SESSION", len(bfdSessions) + 1)
5555

@@ -62,6 +62,7 @@ def test_addRemoveBfdSession(self, dvs):
6262
"SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS": "10.0.0.1",
6363
"SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS": "10.0.0.2",
6464
"SAI_BFD_SESSION_ATTR_TYPE": "SAI_BFD_SESSION_TYPE_ASYNC_ACTIVE",
65+
"SAI_BFD_SESSION_ATTR_TOS": "64",
6566
"SAI_BFD_SESSION_ATTR_IPHDR_VERSION": "4"
6667
}
6768
self.check_asic_bfd_session_value(session, expected_adb_values)
@@ -102,6 +103,7 @@ def test_addRemoveBfdSession_ipv6(self, dvs):
102103
"SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS": "2000::1",
103104
"SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS": "2000::2",
104105
"SAI_BFD_SESSION_ATTR_TYPE": "SAI_BFD_SESSION_TYPE_ASYNC_ACTIVE",
106+
"SAI_BFD_SESSION_ATTR_TOS": "192",
105107
"SAI_BFD_SESSION_ATTR_IPHDR_VERSION": "6"
106108
}
107109
self.check_asic_bfd_session_value(session, expected_adb_values)
@@ -142,6 +144,7 @@ def test_addRemoveBfdSession_interface(self, dvs):
142144
"SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS": "10.0.0.1",
143145
"SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS": "10.0.0.2",
144146
"SAI_BFD_SESSION_ATTR_TYPE": "SAI_BFD_SESSION_TYPE_ASYNC_ACTIVE",
147+
"SAI_BFD_SESSION_ATTR_TOS": "192",
145148
"SAI_BFD_SESSION_ATTR_IPHDR_VERSION": "4",
146149
"SAI_BFD_SESSION_ATTR_HW_LOOKUP_VALID": "false",
147150
"SAI_BFD_SESSION_ATTR_DST_MAC_ADDRESS": "00:02:03:04:05:06"
@@ -184,6 +187,7 @@ def test_addRemoveBfdSession_txrx_interval(self, dvs):
184187
"SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS": "10.0.0.1",
185188
"SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS": "10.0.0.2",
186189
"SAI_BFD_SESSION_ATTR_TYPE": "SAI_BFD_SESSION_TYPE_ASYNC_ACTIVE",
190+
"SAI_BFD_SESSION_ATTR_TOS": "192",
187191
"SAI_BFD_SESSION_ATTR_IPHDR_VERSION": "4",
188192
"SAI_BFD_SESSION_ATTR_MIN_TX": "300000",
189193
"SAI_BFD_SESSION_ATTR_MIN_RX": "500000",
@@ -226,6 +230,7 @@ def test_addRemoveBfdSession_multiplier(self, dvs):
226230
"SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS": "10.0.0.1",
227231
"SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS": "10.0.0.2",
228232
"SAI_BFD_SESSION_ATTR_TYPE": "SAI_BFD_SESSION_TYPE_ASYNC_ACTIVE",
233+
"SAI_BFD_SESSION_ATTR_TOS": "192",
229234
"SAI_BFD_SESSION_ATTR_IPHDR_VERSION": "4",
230235
"SAI_BFD_SESSION_ATTR_MULTIPLIER": "5"
231236
}
@@ -267,6 +272,7 @@ def test_addRemoveBfdSession_multihop(self, dvs):
267272
"SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS": "10.0.0.1",
268273
"SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS": "10.0.0.2",
269274
"SAI_BFD_SESSION_ATTR_TYPE": "SAI_BFD_SESSION_TYPE_ASYNC_ACTIVE",
275+
"SAI_BFD_SESSION_ATTR_TOS": "192",
270276
"SAI_BFD_SESSION_ATTR_IPHDR_VERSION": "4",
271277
"SAI_BFD_SESSION_ATTR_MULTIHOP": "true"
272278
}
@@ -308,6 +314,7 @@ def test_addRemoveBfdSession_type(self, dvs):
308314
"SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS": "10.0.0.1",
309315
"SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS": "10.0.0.2",
310316
"SAI_BFD_SESSION_ATTR_TYPE": "SAI_BFD_SESSION_TYPE_DEMAND_ACTIVE",
317+
"SAI_BFD_SESSION_ATTR_TOS": "192",
311318
"SAI_BFD_SESSION_ATTR_IPHDR_VERSION": "4"
312319
}
313320
self.check_asic_bfd_session_value(session, expected_adb_values)
@@ -350,6 +357,7 @@ def test_multipleBfdSessions(self, dvs):
350357
"SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS": "10.0.0.1",
351358
"SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS": "10.0.0.2",
352359
"SAI_BFD_SESSION_ATTR_TYPE": "SAI_BFD_SESSION_TYPE_ASYNC_ACTIVE",
360+
"SAI_BFD_SESSION_ATTR_TOS": "192",
353361
"SAI_BFD_SESSION_ATTR_IPHDR_VERSION": "4"
354362
}
355363
self.check_asic_bfd_session_value(session1, expected_adb_values)
@@ -376,6 +384,7 @@ def test_multipleBfdSessions(self, dvs):
376384
"SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS": "10.0.0.1",
377385
"SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS": "10.0.1.2",
378386
"SAI_BFD_SESSION_ATTR_TYPE": "SAI_BFD_SESSION_TYPE_ASYNC_ACTIVE",
387+
"SAI_BFD_SESSION_ATTR_TOS": "192",
379388
"SAI_BFD_SESSION_ATTR_IPHDR_VERSION": "4",
380389
"SAI_BFD_SESSION_ATTR_MIN_TX": "300000",
381390
"SAI_BFD_SESSION_ATTR_MIN_RX": "500000",
@@ -404,6 +413,7 @@ def test_multipleBfdSessions(self, dvs):
404413
"SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS": "2000::1",
405414
"SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS": "2000::2",
406415
"SAI_BFD_SESSION_ATTR_TYPE": "SAI_BFD_SESSION_TYPE_DEMAND_ACTIVE",
416+
"SAI_BFD_SESSION_ATTR_TOS": "192",
407417
"SAI_BFD_SESSION_ATTR_IPHDR_VERSION": "6"
408418
}
409419
self.check_asic_bfd_session_value(session3, expected_adb_values)
@@ -430,6 +440,7 @@ def test_multipleBfdSessions(self, dvs):
430440
"SAI_BFD_SESSION_ATTR_SRC_IP_ADDRESS": "3000::1",
431441
"SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS": "3000::2",
432442
"SAI_BFD_SESSION_ATTR_TYPE": "SAI_BFD_SESSION_TYPE_ASYNC_ACTIVE",
443+
"SAI_BFD_SESSION_ATTR_TOS": "192",
433444
"SAI_BFD_SESSION_ATTR_IPHDR_VERSION": "6"
434445
}
435446
self.check_asic_bfd_session_value(session4, expected_adb_values)

0 commit comments

Comments
 (0)