23
23
#include < netpacket/packet.h>
24
24
#include " subscriberstatetable.h"
25
25
#include " select.h"
26
- #include < iostream>
27
26
28
27
#include " dhcp_device.h"
29
28
@@ -56,7 +55,6 @@ constexpr auto DEFAULT_TIMEOUT_MSEC = 1000;
56
55
swss::Select swssSelect;
57
56
std::shared_ptr<swss::DBConnector> stateDbPtr = std::make_shared<swss::DBConnector> (" STATE_DB" , 0 );
58
57
swss::SubscriberStateTable muxTable (stateDbPtr.get(), "HW_MUX_CABLE_TABLE");
59
-
60
58
swss::DBConnector configDb (" CONFIG_DB" , 0 );
61
59
62
60
/* * Berkeley Packet Filter program for "udp and (port 67 or port 68)".
@@ -253,13 +251,14 @@ static void read_callback_dual_tor(int fd, short event, void *arg)
253
251
254
252
bool standby = false ;
255
253
swss::Selectable *selectable;
254
+ swssSelect.addSelectable (&muxTable);
256
255
int ret = swssSelect.select (&selectable, DEFAULT_TIMEOUT_MSEC);
257
256
if (ret == swss::Select::ERROR) {
258
257
syslog (LOG_WARNING, " Select: returned ERROR" );
259
258
}
260
259
261
260
while ((event == EV_READ) &&
262
- ((buffer_sz = recvfrom (fd, context->buffer , context->snaplen , MSG_DONTWAIT, (struct sockaddr *)&sll, &slen) > 0 ) )) {
261
+ ((buffer_sz = recvfrom (fd, context->buffer , context->snaplen , MSG_DONTWAIT, (struct sockaddr *)&sll, &slen)) > 0 )) {
263
262
std::string member_table = std::string (" VLAN_MEMBER|" ) + context->intf + " |" ;
264
263
char interfaceName;
265
264
char *interface = if_indextoname (sll.sll_ifindex , &interfaceName);
@@ -268,14 +267,14 @@ static void read_callback_dual_tor(int fd, short event, void *arg)
268
267
std::deque<swss::KeyOpFieldsValuesTuple> entries;
269
268
muxTable.pops (entries);
270
269
for (auto &entry: entries) {
271
- std::string vlan = kfvKey (entry);
270
+ std::string intf_key = kfvKey (entry);
272
271
std::string operation = kfvOp (entry);
273
272
std::vector<swss::FieldValueTuple> fieldValues = kfvFieldsValues (entry);
274
273
275
274
for (auto &fieldValue: fieldValues) {
276
275
std::string f = fvField (fieldValue);
277
276
std::string v = fvValue (fieldValue);
278
- if (f == " state" && v == " standby" ) {
277
+ if (intf_key == interface && f == " state" && v == " standby" ) {
279
278
standby = true ;
280
279
break ;
281
280
}
@@ -695,12 +694,6 @@ int dhcp_device_start_capture(dhcp_device_context_t *context,
695
694
break ;
696
695
}
697
696
698
- int enable = 1 ;
699
- if (setsockopt (context->sock , SOL_SOCKET, IP_PKTINFO, &enable, sizeof (int )) != 0 ) {
700
- syslog (LOG_ALERT, " setsockopt: failed to set IP_PKTINFO with '%s'\n " , strerror (errno));
701
- break ;
702
- }
703
-
704
697
if (dual_tor_sock)
705
698
ev = event_new (base, context->sock , EV_READ | EV_PERSIST, read_callback_dual_tor, context);
706
699
else
0 commit comments