aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/udp_input.h3
-rw-r--r--src/link_udp.c25
2 files changed, 20 insertions, 8 deletions
diff --git a/include/udp_input.h b/include/udp_input.h
index 2d84fef..7c95384 100644
--- a/include/udp_input.h
+++ b/include/udp_input.h
@@ -38,6 +38,9 @@
#define UDP_DATA_RETR_PRIO_3 19
#define UDP_DATA_RETR_COMPL 32
#define UDP_DATA_RETR_IMPOS 33
+#define UDP_DATA_LINK_UP 34
+#define UDP_DATA_LINK_DOWN 35
+
struct udp_data_hdr {
uint8_t format_type;
diff --git a/src/link_udp.c b/src/link_udp.c
index c0df050..ab6e8b9 100644
--- a/src/link_udp.c
+++ b/src/link_udp.c
@@ -113,23 +113,33 @@ static int udp_read_cb(struct bsc_fd *fd)
goto exit;
}
- /* throw away data as the link is down */
- if (link->set->available == 0) {
- LOGP(DINP, LOGL_ERROR, "The link is down. Not forwarding.\n");
- rc = 0;
- goto exit;
- }
-
if (hdr->data_type == UDP_DATA_RETR_COMPL || hdr->data_type == UDP_DATA_RETR_IMPOS) {
LOGP(DINP, LOGL_ERROR, "Link retrieval done. Restarting the link.\n");
mtp_link_failure(link);
goto exit;
+ } else if (hdr->data_type == UDP_DATA_LINK_UP) {
+ LOGP(DINP, LOGL_NOTICE, "Link of %s/%d is up.\n",
+ link->set->name, link->link_no);
+ mtp_link_up(link);
+ goto exit;
+ } else if (hdr->data_type == UDP_DATA_LINK_DOWN) {
+ LOGP(DINP, LOGL_NOTICE, "Link of %s/%d is down.\n",
+ link->set->name, link->link_no);
+ mtp_link_failure(link);
+ goto exit;
} else if (hdr->data_type > UDP_DATA_MSU_PRIO_3) {
LOGP(DINP, LOGL_ERROR, "Link failure. retrieved message.\n");
mtp_link_failure(link);
goto exit;
}
+ /* throw away data as the link is down */
+ if (link->set->available == 0) {
+ LOGP(DINP, LOGL_ERROR, "The link is down. Not forwarding.\n");
+ rc = 0;
+ goto exit;
+ }
+
length = ntohl(hdr->data_length);
if (length + sizeof(*hdr) > (unsigned int) rc) {
LOGP(DINP, LOGL_ERROR, "The MSU payload does not fit: %u + %u > %d \n",
@@ -312,7 +322,6 @@ void snmp_mtp_callback(struct snmp_mtp_session *session,
switch (area) {
case SNMP_LINK_UP:
- mtp_link_up(link);
break;
case SNMP_LINK_DOWN:
mtp_link_down(link);