mirror of
https://github.com/FRRouting/frr.git
synced 2025-04-30 13:37:17 +02:00
ldpd: changes for code maintainability
these changes are for improving the code maintainability and readability Signed-off-by: sri-mohan1 <sri.mohan@samsung.com>
This commit is contained in:
parent
0352223846
commit
badb1dad2e
|
@ -15,13 +15,12 @@
|
||||||
|
|
||||||
#include "sockopt.h"
|
#include "sockopt.h"
|
||||||
|
|
||||||
static struct iface *disc_find_iface(unsigned int, int,
|
static struct iface *disc_find_iface(unsigned int, int, union ldpd_addr *);
|
||||||
union ldpd_addr *);
|
|
||||||
static void session_read(struct event *thread);
|
static void session_read(struct event *thread);
|
||||||
static void session_write(struct event *thread);
|
static void session_write(struct event *thread);
|
||||||
static ssize_t session_get_pdu(struct ibuf_read *, char **);
|
static ssize_t session_get_pdu(struct ibuf_read *, char **);
|
||||||
static void tcp_close(struct tcp_conn *);
|
static void tcp_close(struct tcp_conn *);
|
||||||
static struct pending_conn *pending_conn_new(int, int, union ldpd_addr *);
|
static struct pending_conn *pending_conn_new(int, int, union ldpd_addr *);
|
||||||
static void pending_conn_timeout(struct event *thread);
|
static void pending_conn_timeout(struct event *thread);
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -144,8 +143,7 @@ void disc_recv_packet(struct event *thread)
|
||||||
|
|
||||||
if ((r = recvmsg(fd, &m, 0)) == -1) {
|
if ((r = recvmsg(fd, &m, 0)) == -1) {
|
||||||
if (errno != EAGAIN && errno != EINTR)
|
if (errno != EAGAIN && errno != EINTR)
|
||||||
log_debug("%s: read error: %s", __func__,
|
log_debug("%s: read error: %s", __func__, strerror(errno));
|
||||||
strerror(errno));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,10 +152,10 @@ void disc_recv_packet(struct event *thread)
|
||||||
multicast = (m.msg_flags & MSG_MCAST) ? 1 : 0;
|
multicast = (m.msg_flags & MSG_MCAST) ? 1 : 0;
|
||||||
#else
|
#else
|
||||||
multicast = 0;
|
multicast = 0;
|
||||||
for (cmsg = CMSG_FIRSTHDR(&m); cmsg != NULL;
|
for (cmsg = CMSG_FIRSTHDR(&m); cmsg != NULL; cmsg = CMSG_NXTHDR(&m, cmsg)) {
|
||||||
cmsg = CMSG_NXTHDR(&m, cmsg)) {
|
|
||||||
#if defined(HAVE_IP_PKTINFO)
|
#if defined(HAVE_IP_PKTINFO)
|
||||||
if (af == AF_INET && cmsg->cmsg_level == IPPROTO_IP &&
|
if (af == AF_INET &&
|
||||||
|
cmsg->cmsg_level == IPPROTO_IP &&
|
||||||
cmsg->cmsg_type == IP_PKTINFO) {
|
cmsg->cmsg_type == IP_PKTINFO) {
|
||||||
struct in_pktinfo *pktinfo;
|
struct in_pktinfo *pktinfo;
|
||||||
|
|
||||||
|
@ -167,7 +165,8 @@ void disc_recv_packet(struct event *thread)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#elif defined(HAVE_IP_RECVDSTADDR)
|
#elif defined(HAVE_IP_RECVDSTADDR)
|
||||||
if (af == AF_INET && cmsg->cmsg_level == IPPROTO_IP &&
|
if (af == AF_INET &&
|
||||||
|
cmsg->cmsg_level == IPPROTO_IP &&
|
||||||
cmsg->cmsg_type == IP_RECVDSTADDR) {
|
cmsg->cmsg_type == IP_RECVDSTADDR) {
|
||||||
struct in_addr *addr;
|
struct in_addr *addr;
|
||||||
|
|
||||||
|
@ -179,7 +178,8 @@ void disc_recv_packet(struct event *thread)
|
||||||
#else
|
#else
|
||||||
#error "Unsupported socket API"
|
#error "Unsupported socket API"
|
||||||
#endif
|
#endif
|
||||||
if (af == AF_INET6 && cmsg->cmsg_level == IPPROTO_IPV6 &&
|
if (af == AF_INET6 &&
|
||||||
|
cmsg->cmsg_level == IPPROTO_IPV6 &&
|
||||||
cmsg->cmsg_type == IPV6_PKTINFO) {
|
cmsg->cmsg_type == IPV6_PKTINFO) {
|
||||||
struct in6_pktinfo *pktinfo;
|
struct in6_pktinfo *pktinfo;
|
||||||
|
|
||||||
|
@ -191,8 +191,7 @@ void disc_recv_packet(struct event *thread)
|
||||||
}
|
}
|
||||||
#endif /* MSG_MCAST */
|
#endif /* MSG_MCAST */
|
||||||
if (bad_addr(af, &src)) {
|
if (bad_addr(af, &src)) {
|
||||||
log_debug("%s: invalid source address: %s", __func__,
|
log_debug("%s: invalid source address: %s", __func__, log_addr(af, &src));
|
||||||
log_addr(af, &src));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ifindex = getsockopt_ifindex(af, &m);
|
ifindex = getsockopt_ifindex(af, &m);
|
||||||
|
@ -207,8 +206,7 @@ void disc_recv_packet(struct event *thread)
|
||||||
/* check packet size */
|
/* check packet size */
|
||||||
len = (uint16_t)r;
|
len = (uint16_t)r;
|
||||||
if (len < (LDP_HDR_SIZE + LDP_MSG_SIZE) || len > LDP_MAX_LEN) {
|
if (len < (LDP_HDR_SIZE + LDP_MSG_SIZE) || len > LDP_MAX_LEN) {
|
||||||
log_debug("%s: bad packet size, source %s", __func__,
|
log_debug("%s: bad packet size, source %s", __func__, log_addr(af, &src));
|
||||||
log_addr(af, &src));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -309,10 +307,8 @@ void session_accept(struct event *thread)
|
||||||
*/
|
*/
|
||||||
if (errno == ENFILE || errno == EMFILE) {
|
if (errno == ENFILE || errno == EMFILE) {
|
||||||
accept_pause();
|
accept_pause();
|
||||||
} else if (errno != EWOULDBLOCK && errno != EINTR &&
|
} else if (errno != EWOULDBLOCK && errno != EINTR && errno != ECONNABORTED)
|
||||||
errno != ECONNABORTED)
|
log_debug("%s: accept error: %s", __func__, strerror(errno));
|
||||||
log_debug("%s: accept error: %s", __func__,
|
|
||||||
strerror(errno));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sock_set_nonblock(newfd);
|
sock_set_nonblock(newfd);
|
||||||
|
@ -445,15 +441,13 @@ static void session_read(struct event *thread)
|
||||||
max_pdu_len = nbr->max_pdu_len;
|
max_pdu_len = nbr->max_pdu_len;
|
||||||
else
|
else
|
||||||
max_pdu_len = LDP_MAX_LEN;
|
max_pdu_len = LDP_MAX_LEN;
|
||||||
if (pdu_len < (LDP_HDR_PDU_LEN + LDP_MSG_SIZE) ||
|
if (pdu_len < (LDP_HDR_PDU_LEN + LDP_MSG_SIZE) || pdu_len > max_pdu_len) {
|
||||||
pdu_len > max_pdu_len) {
|
|
||||||
session_shutdown(nbr, S_BAD_PDU_LEN, 0, 0);
|
session_shutdown(nbr, S_BAD_PDU_LEN, 0, 0);
|
||||||
free(buf);
|
free(buf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pdu_len -= LDP_HDR_PDU_LEN;
|
pdu_len -= LDP_HDR_PDU_LEN;
|
||||||
if (ldp_hdr->lsr_id != nbr->id.s_addr ||
|
if (ldp_hdr->lsr_id != nbr->id.s_addr || ldp_hdr->lspace_id != 0) {
|
||||||
ldp_hdr->lspace_id != 0) {
|
|
||||||
session_shutdown(nbr, S_BAD_LDP_ID, 0, 0);
|
session_shutdown(nbr, S_BAD_LDP_ID, 0, 0);
|
||||||
free(buf);
|
free(buf);
|
||||||
return;
|
return;
|
||||||
|
@ -469,10 +463,8 @@ static void session_read(struct event *thread)
|
||||||
msg = (struct ldp_msg *)pdu;
|
msg = (struct ldp_msg *)pdu;
|
||||||
type = ntohs(msg->type);
|
type = ntohs(msg->type);
|
||||||
msg_len = ntohs(msg->length);
|
msg_len = ntohs(msg->length);
|
||||||
if (msg_len < LDP_MSG_LEN ||
|
if (msg_len < LDP_MSG_LEN || (msg_len + LDP_MSG_DEAD_LEN) > pdu_len) {
|
||||||
(msg_len + LDP_MSG_DEAD_LEN) > pdu_len) {
|
session_shutdown(nbr, S_BAD_MSG_LEN, msg->id, msg->type);
|
||||||
session_shutdown(nbr, S_BAD_MSG_LEN, msg->id,
|
|
||||||
msg->type);
|
|
||||||
free(buf);
|
free(buf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -484,8 +476,7 @@ static void session_read(struct event *thread)
|
||||||
case MSG_TYPE_INIT:
|
case MSG_TYPE_INIT:
|
||||||
if ((nbr->state != NBR_STA_INITIAL) &&
|
if ((nbr->state != NBR_STA_INITIAL) &&
|
||||||
(nbr->state != NBR_STA_OPENSENT)) {
|
(nbr->state != NBR_STA_OPENSENT)) {
|
||||||
session_shutdown(nbr, S_SHUTDOWN,
|
session_shutdown(nbr, S_SHUTDOWN, msg->id, msg->type);
|
||||||
msg->id, msg->type);
|
|
||||||
free(buf);
|
free(buf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -493,8 +484,7 @@ static void session_read(struct event *thread)
|
||||||
case MSG_TYPE_KEEPALIVE:
|
case MSG_TYPE_KEEPALIVE:
|
||||||
if ((nbr->state == NBR_STA_INITIAL) ||
|
if ((nbr->state == NBR_STA_INITIAL) ||
|
||||||
(nbr->state == NBR_STA_OPENSENT)) {
|
(nbr->state == NBR_STA_OPENSENT)) {
|
||||||
session_shutdown(nbr, S_SHUTDOWN,
|
session_shutdown(nbr, S_SHUTDOWN, msg->id, msg->type);
|
||||||
msg->id, msg->type);
|
|
||||||
free(buf);
|
free(buf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -503,8 +493,7 @@ static void session_read(struct event *thread)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (nbr->state != NBR_STA_OPER) {
|
if (nbr->state != NBR_STA_OPER) {
|
||||||
session_shutdown(nbr, S_SHUTDOWN,
|
session_shutdown(nbr, S_SHUTDOWN, msg->id, msg->type);
|
||||||
msg->id, msg->type);
|
|
||||||
free(buf);
|
free(buf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -534,16 +523,14 @@ static void session_read(struct event *thread)
|
||||||
case MSG_TYPE_LABELWITHDRAW:
|
case MSG_TYPE_LABELWITHDRAW:
|
||||||
case MSG_TYPE_LABELRELEASE:
|
case MSG_TYPE_LABELRELEASE:
|
||||||
case MSG_TYPE_LABELABORTREQ:
|
case MSG_TYPE_LABELABORTREQ:
|
||||||
ret = recv_labelmessage(nbr, pdu, msg_size,
|
ret = recv_labelmessage(nbr, pdu, msg_size, type);
|
||||||
type);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
log_debug("%s: unknown LDP message from nbr %pI4",
|
log_debug("%s: unknown LDP message from nbr %pI4",
|
||||||
__func__, &nbr->id);
|
__func__, &nbr->id);
|
||||||
if (!(ntohs(msg->type) & UNKNOWN_FLAG)) {
|
if (!(ntohs(msg->type) & UNKNOWN_FLAG)) {
|
||||||
nbr->stats.unknown_msg++;
|
nbr->stats.unknown_msg++;
|
||||||
send_notification(nbr->tcp,
|
send_notification(nbr->tcp, S_UNKNOWN_MSG, msg->id, msg->type);
|
||||||
S_UNKNOWN_MSG, msg->id, msg->type);
|
|
||||||
}
|
}
|
||||||
/* ignore the message */
|
/* ignore the message */
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
@ -664,8 +651,7 @@ session_shutdown(struct nbr *nbr, uint32_t status, uint32_t msg_id,
|
||||||
void
|
void
|
||||||
session_close(struct nbr *nbr)
|
session_close(struct nbr *nbr)
|
||||||
{
|
{
|
||||||
log_debug("%s: closing session with lsr-id %pI4", __func__,
|
log_debug("%s: closing session with lsr-id %pI4", __func__, &nbr->id);
|
||||||
&nbr->id);
|
|
||||||
|
|
||||||
ldp_sync_fsm_nbr_event(nbr, LDP_SYNC_EVT_SESSION_CLOSE);
|
ldp_sync_fsm_nbr_event(nbr, LDP_SYNC_EVT_SESSION_CLOSE);
|
||||||
|
|
||||||
|
@ -788,8 +774,7 @@ pending_conn_find(int af, union ldpd_addr *addr)
|
||||||
struct pending_conn *pconn;
|
struct pending_conn *pconn;
|
||||||
|
|
||||||
TAILQ_FOREACH(pconn, &global.pending_conns, entry)
|
TAILQ_FOREACH(pconn, &global.pending_conns, entry)
|
||||||
if (af == pconn->af &&
|
if (af == pconn->af && ldp_addrcmp(af, addr, &pconn->addr) == 0)
|
||||||
ldp_addrcmp(af, addr, &pconn->addr) == 0)
|
|
||||||
return (pconn);
|
return (pconn);
|
||||||
|
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
Loading…
Reference in a new issue