Some cleaning and comments
This commit is contained in:
parent
af6b5177fa
commit
cd28e3892e
18
vrrp_adv.c
18
vrrp_adv.c
|
@ -84,7 +84,6 @@ static int vrrp_adv_eth_build(struct iovec *iov, const uint8_t vrid,
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* vrrp_adv_ip4_build() - build VRRP IPv4 advertisement
|
||||
*/
|
||||
|
@ -108,7 +107,7 @@ static int vrrp_adv_ip4_build(struct iovec *iov, const struct vrrp_net *vnet)
|
|||
iph->frag_off = 0x00;
|
||||
iph->protocol = IPPROTO_VRRP;
|
||||
|
||||
iph->saddr = vnet->vif.ipx.addr.s_addr;
|
||||
iph->saddr = vnet->vif.ip_addr.s_addr;
|
||||
iph->daddr = htonl(INADDR_VRRP_GROUP);
|
||||
|
||||
iph->check = 0;
|
||||
|
@ -119,7 +118,6 @@ static int vrrp_adv_ip4_build(struct iovec *iov, const struct vrrp_net *vnet)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* vrrp_adv_ip6_build() - build VRRP IPv6 advertisement
|
||||
*/
|
||||
|
@ -151,8 +149,6 @@ static int vrrp_adv_ip6_build(struct iovec *iov, const struct vrrp_net *vnet)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* vrrp_net_adv_build() - build VRRP adv pkt
|
||||
*/
|
||||
|
@ -172,11 +168,12 @@ static int vrrp_adv_build(struct iovec *iov, const struct vrrp_net *vnet,
|
|||
pkt->vrid = vnet->vrid;
|
||||
pkt->priority = vrrp->priority;
|
||||
pkt->naddr = vrrp->naddr;
|
||||
|
||||
if (vrrp->version == RFC3768) {
|
||||
pkt->auth_type = vrrp->auth_type;
|
||||
pkt->adv_int = vrrp->adv_int;
|
||||
}
|
||||
if (vrrp->version == RFC5798) {
|
||||
else if (vrrp->version == RFC5798) {
|
||||
pkt->max_adv_int = htons(vrrp->adv_int);
|
||||
}
|
||||
|
||||
|
@ -189,6 +186,7 @@ static int vrrp_adv_build(struct iovec *iov, const struct vrrp_net *vnet,
|
|||
int naddr = 0;
|
||||
|
||||
list_for_each_entry_reverse(vip_ptr, &vnet->vip_list, iplist) {
|
||||
|
||||
if (vnet->family == AF_INET) {
|
||||
vip_addr[pos] = vip_ptr->ip_addr.s_addr;
|
||||
++pos;
|
||||
|
@ -199,6 +197,7 @@ static int vrrp_adv_build(struct iovec *iov, const struct vrrp_net *vnet,
|
|||
pos += 4;
|
||||
}
|
||||
++naddr;
|
||||
|
||||
if (naddr > vrrp->naddr) {
|
||||
log_error
|
||||
("[%d] Build invalid avd pkt : try to write more vip than expected",
|
||||
|
@ -246,7 +245,6 @@ int vrrp_adv_send_zero(struct vrrp_net *vnet)
|
|||
uint16_t chksum = pkt->chksum;
|
||||
|
||||
/* chksum */
|
||||
|
||||
pkt->chksum = vnet->adv_checksum(vnet, pkt, NULL, NULL);
|
||||
|
||||
/* send adv pkt */
|
||||
|
@ -264,13 +262,15 @@ int vrrp_adv_send_zero(struct vrrp_net *vnet)
|
|||
*/
|
||||
int vrrp_adv_init(struct vrrp_net *vnet, const struct vrrp *vrrp)
|
||||
{
|
||||
int status = 0;
|
||||
int status = -1;
|
||||
|
||||
status = vrrp_adv_eth_build(&vnet->__adv[0], vnet->vrid, vnet->family);
|
||||
|
||||
if (vnet->family == AF_INET)
|
||||
status |= vrrp_adv_ip4_build(&vnet->__adv[1], vnet);
|
||||
else
|
||||
else /* AF_INET6 */
|
||||
status |= vrrp_adv_ip6_build(&vnet->__adv[1], vnet);
|
||||
|
||||
status |= vrrp_adv_build(&vnet->__adv[2], vnet, vrrp);
|
||||
|
||||
return status;
|
||||
|
|
|
@ -29,7 +29,6 @@ int vrrp_adv_send(struct vrrp_net *vnet);
|
|||
int vrrp_adv_send_zero(struct vrrp_net *vnet);
|
||||
uint16_t vrrp_adv_chksum(struct vrrp_net *vnet, struct vrrphdr *pkt,
|
||||
uint32_t saddr, uint32_t daddr);
|
||||
|
||||
uint16_t vrrp_adv_ip6_chksum(struct vrrp_net *vnet, struct vrrphdr *pkt,
|
||||
struct in6_addr *saddr, struct in6_addr *daddr);
|
||||
|
||||
|
|
|
@ -161,7 +161,7 @@ static int vrrp_arp_vrrp_build(struct iovec *iov, struct vrrp_ip *vip,
|
|||
*/
|
||||
int vrrp_arp_init(struct vrrp_net *vnet)
|
||||
{
|
||||
int status = 0;
|
||||
int status = -1;
|
||||
|
||||
/* we have to build one arp pkt by vip */
|
||||
struct vrrp_ip *vip_ptr = NULL;
|
||||
|
@ -192,6 +192,5 @@ void vrrp_arp_cleanup(struct vrrp_net *vnet)
|
|||
struct iovec *iov = &vip_ptr->__topology[i];
|
||||
free(iov->iov_base);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -254,6 +254,7 @@ static int vrrp_ip4_setsockopt( __attribute__ ((unused))
|
|||
int sock_fd, __attribute__ ((unused))
|
||||
int vrid)
|
||||
{
|
||||
/* nop */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
20
vrrp_ip6.c
20
vrrp_ip6.c
|
@ -127,7 +127,6 @@ static int vrrp_ip6_mgroup(struct vrrp_net *vnet)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* vrrp_ip6_cmp() - Compare VIP list between received vrrpkt and our instance
|
||||
* Return 0 if the list is the same,
|
||||
|
@ -138,11 +137,6 @@ static int vrrp_ip6_viplist_cmp(struct vrrp_net *vnet, struct vrrphdr *vrrpkt)
|
|||
uint32_t *vip_addr =
|
||||
(uint32_t *) ((unsigned char *) vrrpkt + VRRP_PKTHDR_SIZE);
|
||||
|
||||
#ifdef DEBUG
|
||||
print_buf_hexa("vrrp_net_vip6_check vip_addr", vip_addr,
|
||||
sizeof(struct in6_addr));
|
||||
#endif
|
||||
|
||||
uint32_t pos = 0;
|
||||
int naddr = 0;
|
||||
int ndiff = 0;
|
||||
|
@ -222,13 +216,11 @@ static int vrrp_ip6_recv(int sock_fd, struct vrrp_recv *recv,
|
|||
return -1;
|
||||
}
|
||||
|
||||
/* SRC ADDRESS */
|
||||
/* src address */
|
||||
memcpy(&recv->ip_saddr6, &src.sin6_addr, sizeof(struct in6_addr));
|
||||
|
||||
uint8_t *opt;
|
||||
|
||||
/* HOPLIMIT */
|
||||
opt = find_ancillary(&msg, IPV6_HOPLIMIT);
|
||||
/* hoplimit */
|
||||
uint8_t *opt = find_ancillary(&msg, IPV6_HOPLIMIT);
|
||||
if (opt == NULL) {
|
||||
log_error("recvmsg - unknown hop limit");
|
||||
return -1;
|
||||
|
@ -236,7 +228,7 @@ static int vrrp_ip6_recv(int sock_fd, struct vrrp_recv *recv,
|
|||
|
||||
recv->header.ttl = *(int *) opt;
|
||||
|
||||
/* DST ADDRESS */
|
||||
/* dst address */
|
||||
opt = find_ancillary(&msg, IPV6_PKTINFO);
|
||||
if (opt == NULL) {
|
||||
log_error("recvmsg - unknown dst address");
|
||||
|
@ -247,9 +239,11 @@ static int vrrp_ip6_recv(int sock_fd, struct vrrp_recv *recv,
|
|||
|
||||
memcpy(&recv->ip_daddr6, &pktinfo->ipi6_addr, sizeof(struct in6_addr));
|
||||
|
||||
/* other options */
|
||||
recv->header.len = sizeof(struct ip6_hdr);
|
||||
recv->header.totlen = recv->header.len + len;
|
||||
/* kludge, we force it since we have no way to read it in recvmsg() */
|
||||
/* kludge, we force it since we have no way to read it in recvmsg().
|
||||
* But we have set IPPROTO_VRRP in vrrp_net_socket() */
|
||||
recv->header.proto = IPPROTO_VRRP;
|
||||
|
||||
/* buf is directly filled with VRRP adv
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#define IN6ADDR_MCAST "ff02::1"
|
||||
|
||||
#define ETHDR_SIZE sizeof(struct ether_header)
|
||||
|
||||
/**
|
||||
* ether_header vrrp_na_eth
|
||||
*/
|
||||
|
@ -50,7 +51,6 @@ static struct ether_header vrrp_na_eth = {
|
|||
0x00}, /* vrrp->vrid */
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* pshdr_ip6 - pseudo header IPv6
|
||||
*/
|
||||
|
@ -205,7 +205,7 @@ int vrrp_na_send(struct vrrp_net *vnet)
|
|||
*/
|
||||
int vrrp_na_init(struct vrrp_net *vnet)
|
||||
{
|
||||
int status = 0;
|
||||
int status = -1;
|
||||
|
||||
/* we have to build one na pkt by vip */
|
||||
struct vrrp_ip *vip_ptr = NULL;
|
||||
|
|
|
@ -50,11 +50,6 @@
|
|||
|
||||
#include "linux/types.h"
|
||||
|
||||
|
||||
|
||||
|
||||
#define VRRP_MGROUP4 "224.0.0.18"
|
||||
#define VRRP_MGROUP6 "ff02::12"
|
||||
#define VRRP_TTL 255
|
||||
|
||||
static inline void vrrp_net_invalidate_buffer(struct vrrp_net *vnet);
|
||||
|
|
|
@ -242,7 +242,7 @@ int vrrp_options(struct vrrp *vrrp, struct vrrp_net *vnet, int argc,
|
|||
/* default adv int */
|
||||
if ((vrrp->version == RFC3768) && (vrrp->adv_int == 0))
|
||||
vrrp->adv_int = 1;
|
||||
if ((vrrp->version == RFC5798) && (vrrp->adv_int == 0))
|
||||
else if ((vrrp->version == RFC5798) && (vrrp->adv_int == 0))
|
||||
vrrp->adv_int = 100;
|
||||
|
||||
/* Get IP addresse from interface name */
|
||||
|
|
20
vrrp_state.c
20
vrrp_state.c
|
@ -72,15 +72,15 @@ int vrrp_state_backup(struct vrrp *vrrp, struct vrrp_net *vnet)
|
|||
char straddr[INET6_ADDRSTRLEN];
|
||||
|
||||
switch (event) {
|
||||
case TIMER:
|
||||
case TIMER: /* TIMER expired */
|
||||
log_notice("vrid %d :: %s", vrrp->vrid,
|
||||
"masterdown_timer expired");
|
||||
|
||||
vrrp_state_goto_master(vrrp, vnet);
|
||||
break;
|
||||
|
||||
case PKT: /* valid PKT adv */
|
||||
/* Must be impossible */
|
||||
case PKT: /* PKT received */
|
||||
/* Must be impossible, invalid received adv buffer */
|
||||
if (vrrp_adv_get_version(vnet) == 0) {
|
||||
log_error("vrid %d :: %s", vrrp->vrid,
|
||||
"recv buffer empty !?");
|
||||
|
@ -120,13 +120,6 @@ int vrrp_state_backup(struct vrrp *vrrp, struct vrrp_net *vnet)
|
|||
vrrp->master_adv_int =
|
||||
vrrp_adv_get_advint(vnet);
|
||||
|
||||
#ifdef DEBUG
|
||||
print_buf_hexa("hexa master_adv_int",
|
||||
&vrrp->master_adv_int, sizeof(uint16_t));
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
VRRP_SET_MASTERDOWN_TIMER(vrrp);
|
||||
break;
|
||||
}
|
||||
|
@ -166,7 +159,6 @@ int vrrp_state_backup(struct vrrp *vrrp, struct vrrp_net *vnet)
|
|||
return event;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* vrrp_state_master() - handle master state
|
||||
*/
|
||||
|
@ -175,14 +167,15 @@ int vrrp_state_master(struct vrrp *vrrp, struct vrrp_net *vnet)
|
|||
int event = vrrp_net_listen(vnet, vrrp);
|
||||
|
||||
switch (event) {
|
||||
case TIMER:
|
||||
case TIMER: /* TIMER expired */
|
||||
/* adv_timer expired, time to send another */
|
||||
log_info("vrid %d :: %s", vrrp->vrid, "adv_timer expired");
|
||||
vrrp_adv_send(vnet);
|
||||
VRRP_SET_ADV_TIMER(vrrp);
|
||||
break;
|
||||
|
||||
case PKT:
|
||||
case PKT: /* PKT received */
|
||||
/* Must be impossible, invalid adv received buffer */
|
||||
if (vrrp_adv_get_version(vnet) == 0) {
|
||||
log_error("vrid %d :: %s", vrrp->vrid,
|
||||
"recv buffer empty !?");
|
||||
|
@ -320,6 +313,7 @@ static int vrrp_state_goto_backup(struct vrrp *vrrp, struct vrrp_net *vnet)
|
|||
if (previous_state != INIT)
|
||||
vrrp_exec(vrrp, vnet, vrrp->state);
|
||||
|
||||
/* RFC5798, use of master_adv_int */
|
||||
if (vrrp->version == RFC5798) {
|
||||
if (previous_state == INIT)
|
||||
vrrp->master_adv_int = vrrp->adv_int;
|
||||
|
|
|
@ -83,11 +83,13 @@ int vrrp_timer_set(struct vrrp_timer *timer, time_t delay, long delay_cs)
|
|||
timer->ts.tv_sec += delay;
|
||||
timer->ts.tv_nsec += delay_cs * CENTUL;
|
||||
|
||||
#ifdef DEBUG
|
||||
log_debug("delay %ld", delay);
|
||||
log_debug("delay_cs %ld", delay_cs);
|
||||
|
||||
log_debug("timer->ts.tv_sec %ld", timer->ts.tv_sec);
|
||||
log_debug("timer->ts.tv_nsec %ld", timer->ts.tv_nsec);
|
||||
#endif /* DEBUG */
|
||||
|
||||
/* reset delta */
|
||||
timer->delta.tv_sec = 0;
|
||||
|
@ -148,8 +150,10 @@ int vrrp_timer_update(struct vrrp_timer *timer)
|
|||
timer->ts.tv_sec = ts.tv_sec + timer->delta.tv_sec;
|
||||
timer->ts.tv_nsec = ts.tv_nsec + timer->delta.tv_nsec;
|
||||
|
||||
#ifdef DEBUG
|
||||
log_debug("timer->ts.tv_sec %ld", timer->ts.tv_sec);
|
||||
log_debug("timer->ts.tv_nsec %ld", timer->ts.tv_nsec);
|
||||
#endif /* DEBUG */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -48,7 +48,6 @@ int vrrp_timer_update(struct vrrp_timer *timer);
|
|||
int vrrp_timer_is_expired(struct vrrp_timer *timer);
|
||||
|
||||
/* Specific VRRP timer macros */
|
||||
|
||||
#define SKEW_TIME( v ) \
|
||||
( (256 - v->priority) * \
|
||||
(v->version==3?v->master_adv_int:1) / 256 )
|
||||
|
|
Loading…
Reference in a new issue