Revision 05476c4d lib/socket.h

View differences:

lib/socket.h
10 10
#define _BIRD_SOCKET_H_
11 11

  
12 12
#include <errno.h>
13
// #include <sys/socket.h>
13 14

  
14 15
#include "lib/resource.h"
15 16

  
......
43 44
  unsigned lifindex;			/* local interface that received the datagram */
44 45
  /* laddr and lifindex are valid only if SKF_LADDR_RX flag is set to request it */
45 46

  
47
  int af;				/* Address family (AF_INET, AF_INET6 or 0 for non-IP) of fd */
46 48
  int fd;				/* System-dependent data */
47 49
  int index;				/* Index in poll buffer */
50
  int rcv_ttl;				/* TTL of last received datagram */
48 51
  node n;
49 52
  void *rbuf_alloc, *tbuf_alloc;
50
  char *password;				/* Password for MD5 authentication */
53
  char *password;			/* Password for MD5 authentication */
54
  char *err;				/* Error message */
51 55
} sock;
52 56

  
53 57
sock *sock_new(pool *);			/* Allocate new socket */
54 58
#define sk_new(X) sock_new(X)		/* Wrapper to avoid name collision with OpenSSL */
55 59

  
56 60
int sk_open(sock *);			/* Open socket */
61
int sk_rx_ready(sock *s);
57 62
int sk_send(sock *, unsigned len);	/* Send data, <0=err, >0=ok, 0=sleep */
58 63
int sk_send_to(sock *, unsigned len, ip_addr to, unsigned port); /* sk_send to given destination */
59 64
void sk_reallocate(sock *);		/* Free and allocate tbuf & rbuf */
......
61 66
void sk_set_tbsize(sock *s, uint val);	/* Resize TX buffer, keeping content */
62 67
void sk_set_tbuf(sock *s, void *tbuf);	/* Switch TX buffer, NULL-> return to internal */
63 68
void sk_dump_all(void);
64
int sk_set_ttl(sock *s, int ttl);	/* Set transmit TTL for given socket */
65
int sk_set_min_ttl(sock *s, int ttl);	/* Set minimal accepted TTL for given socket */
66 69

  
67
/* Add or remove security associations for given passive socket */
68
int sk_set_md5_auth(sock *s, ip_addr a, struct iface *ifa, char *passwd);
69
int sk_rx_ready(sock *s);
70
static inline int sk_send_buffer_empty(sock *sk)
71
{ return sk->tbuf == sk->tpos; }
70 72

  
71
/* Prepare UDP or IP socket to multicasting. s->iface and s->ttl must be set */
72
int sk_setup_multicast(sock *s);	
73
int sk_join_group(sock *s, ip_addr maddr);
74
int sk_leave_group(sock *s, ip_addr maddr);
75 73

  
76 74
#ifdef IPV6
77
int sk_set_ipv6_checksum(sock *s, int offset);
78
int sk_set_icmp_filter(sock *s, int p1, int p2);
75
#define sk_is_ipv4(X) 0
76
#define sk_is_ipv6(X) 1
77
#else
78
#define sk_is_ipv4(X) 1
79
#define sk_is_ipv6(X) 0
79 80
#endif
80 81

  
81
int sk_set_broadcast(sock *s, int enable);
82 82

  
83
static inline int
84
sk_send_buffer_empty(sock *sk)
85
{
86
	return sk->tbuf == sk->tpos;
87
}
83
int sk_setup_multicast(sock *s);	/* Prepare UDP or IP socket for multicasting */
84
int sk_join_group(sock *s, ip_addr maddr);	/* Join multicast group on sk iface */
85
int sk_leave_group(sock *s, ip_addr maddr);	/* Leave multicast group on sk iface */
86
int sk_setup_broadcast(sock *s);
87
int sk_set_ttl(sock *s, int ttl);	/* Set transmit TTL for given socket */
88
int sk_set_min_ttl(sock *s, int ttl);	/* Set minimal accepted TTL for given socket */
89
int sk_set_md5_auth(sock *s, ip_addr a, struct iface *ifa, char *passwd);
90
int sk_set_ipv6_checksum(sock *s, int offset);
91
int sk_set_icmp6_filter(sock *s, int p1, int p2);
92
void sk_log_error(sock *s, const char *p);
93

  
94
extern int sk_priority_control;		/* Suggested priority for control traffic, should be sysdep define */
88 95

  
89
extern int sk_priority_control;	/* Suggested priority for control traffic, should be sysdep define */
90 96

  
91 97
/* Socket flags */
92 98

  
93
#define SKF_V6ONLY	1	/* Use IPV6_V6ONLY socket option */
94
#define SKF_LADDR_RX	2	/* Report local address for RX packets */
95
#define SKF_TTL_RX	4	/* Report TTL / Hop Limit for RX packets */
96
#define SKF_BIND	8	/* Bind datagram socket to given source address */
99
#define SKF_V4ONLY	0x01	/* Use IPv4 for IP sockets */
100
#define SKF_V6ONLY	0x02	/* Use IPV6_V6ONLY socket option */
101
#define SKF_LADDR_RX	0x04	/* Report local address for RX packets */
102
#define SKF_TTL_RX	0x08	/* Report TTL / Hop Limit for RX packets */
103
#define SKF_BIND	0x10	/* Bind datagram socket to given source address */
97 104

  
98 105
#define SKF_THREAD	0x100	/* Socked used in thread, Do not add to main loop */
99 106
#define SKF_TRUNCATED	0x200	/* Received packet was truncated, set by IO layer */

Also available in: Unified diff