Skip to content

Commit 1bccfe6

Browse files
author
Ubuntu
committed
Add dhcpmon rule dependency
1 parent 667f668 commit 1bccfe6

File tree

8 files changed

+13
-24
lines changed

8 files changed

+13
-24
lines changed

rules/dhcpmon.mk

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ SONIC_DHCPMON_VERSION = 1.0.0-0
44
SONIC_DHCPMON_PKG_NAME = dhcpmon
55

66
SONIC_DHCPMON = sonic-$(SONIC_DHCPMON_PKG_NAME)_$(SONIC_DHCPMON_VERSION)_$(CONFIGURED_ARCH).deb
7+
$(SONIC_DHCPMON)_DEPENDS = $(LIBSWSSCOMMON) $(LIBHIREDIS) $(LIBSWSSCOMMON_DEV) $(LIBHIREDIS_DEV)
78
$(SONIC_DHCPMON)_SRC_PATH = $(SRC_PATH)/$(SONIC_DHCPMON_PKG_NAME)
89
SONIC_DPKG_DEBS += $(SONIC_DHCPMON)
910

src/dhcpmon/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ all: sonic-dhcpmon
2424
# Tool invocations
2525
sonic-dhcpmon: $(OBJS) $(USER_OBJS)
2626
@echo 'Building target: $@'
27-
@echo 'Invoking: GCC C Linker'
27+
@echo 'Invoking: G++ C Linker'
2828
$(CC) -o "$(DHCPMON_TARGET)" $(OBJS) $(USER_OBJS) $(LIBS)
2929
@echo 'Finished building target: $@'
3030
@echo ' '

src/dhcpmon/objects.mk

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
USER_OBJS :=
22

3-
LIBS := -levent -lexplain -lswsscommon -pthread -lboost_thread -lboost_system
3+
LIBS := -levent -lexplain -lswsscommon -pthread -lboost_thread -lboost_system -lhiredis
44

src/dhcpmon/src/dhcp_device.cpp

+4-11
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
#include <netpacket/packet.h>
2424
#include "subscriberstatetable.h"
2525
#include "select.h"
26-
#include <iostream>
2726

2827
#include "dhcp_device.h"
2928

@@ -56,7 +55,6 @@ constexpr auto DEFAULT_TIMEOUT_MSEC = 1000;
5655
swss::Select swssSelect;
5756
std::shared_ptr<swss::DBConnector> stateDbPtr = std::make_shared<swss::DBConnector> ("STATE_DB", 0);
5857
swss::SubscriberStateTable muxTable(stateDbPtr.get(), "HW_MUX_CABLE_TABLE");
59-
6058
swss::DBConnector configDb("CONFIG_DB", 0);
6159

6260
/** 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)
253251

254252
bool standby = false;
255253
swss::Selectable *selectable;
254+
swssSelect.addSelectable(&muxTable);
256255
int ret = swssSelect.select(&selectable, DEFAULT_TIMEOUT_MSEC);
257256
if (ret == swss::Select::ERROR) {
258257
syslog(LOG_WARNING, "Select: returned ERROR");
259258
}
260259

261260
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)) {
263262
std::string member_table = std::string("VLAN_MEMBER|") + context->intf + "|";
264263
char interfaceName;
265264
char *interface = if_indextoname(sll.sll_ifindex, &interfaceName);
@@ -268,14 +267,14 @@ static void read_callback_dual_tor(int fd, short event, void *arg)
268267
std::deque<swss::KeyOpFieldsValuesTuple> entries;
269268
muxTable.pops(entries);
270269
for (auto &entry: entries) {
271-
std::string vlan = kfvKey(entry);
270+
std::string intf_key = kfvKey(entry);
272271
std::string operation = kfvOp(entry);
273272
std::vector<swss::FieldValueTuple> fieldValues = kfvFieldsValues(entry);
274273

275274
for (auto &fieldValue: fieldValues) {
276275
std::string f = fvField(fieldValue);
277276
std::string v = fvValue(fieldValue);
278-
if(f == "state" && v == "standby") {
277+
if(intf_key == interface && f == "state" && v == "standby") {
279278
standby = true;
280279
break;
281280
}
@@ -695,12 +694,6 @@ int dhcp_device_start_capture(dhcp_device_context_t *context,
695694
break;
696695
}
697696

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-
704697
if (dual_tor_sock)
705698
ev = event_new(base, context->sock, EV_READ | EV_PERSIST, read_callback_dual_tor, context);
706699
else

src/dhcpmon/src/dhcp_device.h

-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ typedef struct
7878
uint8_t is_uplink; /** north interface? */
7979
char intf[IF_NAMESIZE]; /** device (interface) name */
8080
uint8_t *buffer; /** buffer used to read socket data */
81-
struct msghdr msg;
8281
size_t snaplen; /** snap length or buffer size */
8382
uint64_t counters[DHCP_COUNTERS_COUNT][DHCP_DIR_COUNT][DHCP_MESSAGE_TYPE_COUNT];
8483
/** current/snapshot counters of DHCP packets */

src/dhcpmon/src/dhcp_mon.cpp

+2-7
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ typedef struct
2626
} dhcp_mon_state_t;
2727

2828
/** window_interval_sec monitoring window for dhcp relay health checks */
29-
static int window_interval_sec = 5;
29+
static int window_interval_sec = 18;
3030
/** dhcp_unhealthy_max_count max count of consecutive unhealthy statuses before reporting to syslog */
31-
static int dhcp_unhealthy_max_count = 1;
31+
static int dhcp_unhealthy_max_count = 10;
3232
/** libevent base struct */
3333
static struct event_base *base;
3434
/** libevent timeout event struct */
@@ -102,13 +102,8 @@ static void check_dhcp_relay_health(dhcp_mon_state_t *state_data)
102102
break;
103103
case DHCP_MON_STATUS_HEALTHY:
104104
state_data->count = 0;
105-
syslog(LOG_ALERT, state_data->msg, state_data->count * window_interval_sec, context->intf);
106-
dhcp_devman_print_status(context, DHCP_COUNTERS_SNAPSHOT);
107-
dhcp_devman_print_status(context, DHCP_COUNTERS_CURRENT);
108105
break;
109106
case DHCP_MON_STATUS_INDETERMINATE:
110-
dhcp_devman_print_status(context, DHCP_COUNTERS_SNAPSHOT);
111-
dhcp_devman_print_status(context, DHCP_COUNTERS_CURRENT);
112107
if (state_data->count) {
113108
state_data->count++;
114109
}

src/dhcpmon/src/main.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ static const uint32_t dhcpmon_default_health_check_window = 18;
3232
* with DHCP relay */
3333
static const uint32_t dhcpmon_default_unhealthy_max_count = 10;
3434

35+
bool dual_tor_sock = false;
36+
3537
/**
3638
* @code usage(prog);
3739
*
@@ -115,7 +117,6 @@ int main(int argc, char **argv)
115117
int max_unhealthy_count = dhcpmon_default_unhealthy_max_count;
116118
size_t snaplen = dhcpmon_default_snaplen;
117119
int make_daemon = 0;
118-
int dual_tor_sock = false;
119120

120121
setlogmask(LOG_UPTO(LOG_INFO));
121122
openlog(basename(argv[0]), LOG_CONS | LOG_PID | LOG_NDELAY, LOG_DAEMON);

src/dhcpmon/src/subdir.mk

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ C_DEPS += \
2121

2222

2323
# Each subdirectory must supply rules for building sources it contributes
24-
src/%.o: ../src/%.cpp
24+
src/%.o: src/%.cpp
2525
@echo 'Building file: $<'
2626
@echo 'Invoking: GCC C Compiler'
27-
$(CC) -O3 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
27+
$(CC) -O3 -g3 -Wall -I$(PWD)/../sonic-swss-common/common -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
2828
@echo 'Finished building: $<'
2929
@echo ' '

0 commit comments

Comments
 (0)