mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
Removed BITS_PER_IP_ADDRESS, MAX_PREFIX_LENGTH, BIRD_AF
Explicit setting of AF_INET(6|) in IP socket creation. BFD set to listen on v6, without setting the V6ONLY flag to catch both v4 and v6 traffic. Squashing and minor changes by Ondrej Santiago Zajicek
This commit is contained in:
committed by
Ondrej Zajicek (work)
parent
9b136840d9
commit
d7661fbe9d
@@ -1311,8 +1311,8 @@ sk_passive_connected(sock *s, int type)
|
||||
|
||||
sock *t = sk_new(s->pool);
|
||||
t->type = type;
|
||||
t->fd = fd;
|
||||
t->af = s->af;
|
||||
t->fd = fd;
|
||||
t->ttl = s->ttl;
|
||||
t->tos = s->tos;
|
||||
t->rbsize = s->rbsize;
|
||||
@@ -1371,7 +1371,6 @@ sk_passive_connected(sock *s, int type)
|
||||
int
|
||||
sk_open(sock *s)
|
||||
{
|
||||
int af = BIRD_AF;
|
||||
int fd = -1;
|
||||
int do_bind = 0;
|
||||
int bind_port = 0;
|
||||
@@ -1384,28 +1383,28 @@ sk_open(sock *s)
|
||||
s->ttx = ""; /* Force s->ttx != s->tpos */
|
||||
/* Fall thru */
|
||||
case SK_TCP_PASSIVE:
|
||||
fd = socket(af, SOCK_STREAM, IPPROTO_TCP);
|
||||
fd = socket(s->af, SOCK_STREAM, IPPROTO_TCP);
|
||||
bind_port = s->sport;
|
||||
bind_addr = s->saddr;
|
||||
do_bind = bind_port || ipa_nonzero(bind_addr);
|
||||
break;
|
||||
|
||||
case SK_UDP:
|
||||
fd = socket(af, SOCK_DGRAM, IPPROTO_UDP);
|
||||
fd = socket(s->af, SOCK_DGRAM, IPPROTO_UDP);
|
||||
bind_port = s->sport;
|
||||
bind_addr = (s->flags & SKF_BIND) ? s->saddr : IPA_NONE;
|
||||
do_bind = 1;
|
||||
break;
|
||||
|
||||
case SK_IP:
|
||||
fd = socket(af, SOCK_RAW, s->dport);
|
||||
fd = socket(s->af, SOCK_RAW, s->dport);
|
||||
bind_port = 0;
|
||||
bind_addr = (s->flags & SKF_BIND) ? s->saddr : IPA_NONE;
|
||||
do_bind = ipa_nonzero(bind_addr);
|
||||
break;
|
||||
|
||||
case SK_MAGIC:
|
||||
af = 0;
|
||||
s->af = 0;
|
||||
fd = s->fd;
|
||||
break;
|
||||
|
||||
@@ -1419,7 +1418,6 @@ sk_open(sock *s)
|
||||
if (fd >= FD_SETSIZE)
|
||||
ERR2("FD_SETSIZE limit reached");
|
||||
|
||||
s->af = af;
|
||||
s->fd = fd;
|
||||
|
||||
if (sk_setup(s) < 0)
|
||||
@@ -1448,7 +1446,7 @@ sk_open(sock *s)
|
||||
if (sk_set_high_port(s) < 0)
|
||||
log(L_WARN "Socket error: %s%#m", s->err);
|
||||
|
||||
sockaddr_fill(&sa, af, bind_addr, s->iface, bind_port);
|
||||
sockaddr_fill(&sa, s->af, bind_addr, s->iface, bind_port);
|
||||
if (bind(fd, &sa.sa, SA_LEN(sa)) < 0)
|
||||
ERR2("bind");
|
||||
}
|
||||
@@ -1460,7 +1458,7 @@ sk_open(sock *s)
|
||||
switch (s->type)
|
||||
{
|
||||
case SK_TCP_ACTIVE:
|
||||
sockaddr_fill(&sa, af, s->daddr, s->iface, s->dport);
|
||||
sockaddr_fill(&sa, s->af, s->daddr, s->iface, s->dport);
|
||||
if (connect(fd, &sa.sa, SA_LEN(sa)) >= 0)
|
||||
sk_tcp_connected(s);
|
||||
else if (errno != EINTR && errno != EAGAIN && errno != EINPROGRESS &&
|
||||
|
@@ -47,14 +47,6 @@ typedef struct sockaddr_bird {
|
||||
} sockaddr;
|
||||
|
||||
|
||||
#ifdef IPV6
|
||||
#define BIRD_AF AF_INET6
|
||||
#define ipa_from_sa(x) ipa_from_sa6(x)
|
||||
#else
|
||||
#define BIRD_AF AF_INET
|
||||
#define ipa_from_sa(x) ipa_from_sa4(x)
|
||||
#endif
|
||||
|
||||
|
||||
/* This is sloppy hack, it should be detected by configure script */
|
||||
/* Linux systems have it defined so this is definition for BSD systems */
|
||||
@@ -75,6 +67,16 @@ static inline ip_addr ipa_from_sa4(sockaddr *sa)
|
||||
static inline ip_addr ipa_from_sa6(sockaddr *sa)
|
||||
{ return ipa_from_in6(((struct sockaddr_in6 *) sa)->sin6_addr); }
|
||||
|
||||
static inline ip_addr ipa_from_sa(sockaddr *sa)
|
||||
{
|
||||
switch (sa->sa.sa_family)
|
||||
{
|
||||
case AF_INET: return ipa_from_sa4(sa);
|
||||
case AF_INET6: return ipa_from_sa6(sa);
|
||||
default: return IPA_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
static inline struct in_addr ipa_to_in4(ip_addr a)
|
||||
{ return (struct in_addr) { htonl(ipa_to_u32(a)) }; }
|
||||
|
||||
|
Reference in New Issue
Block a user