diff options
-rw-r--r-- | include/udp_input.h | 3 | ||||
-rw-r--r-- | src/link_udp.c | 25 |
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); |