udp: Use link up/down signals from the MIB for the link
The mib was patched to send link up/down in case of failures,
only put a link service when the MIB tells us the link is
up, the failure case should only happen for remote links
failing. We will reset and go through link alignment.
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 @@
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 @@
switch (area) {
case SNMP_LINK_UP:
- mtp_link_up(link);
break;
case SNMP_LINK_DOWN:
mtp_link_down(link);