Annotation of embedaddon/mtr/packet/sockaddr.c, revision 1.1
1.1 ! misho 1: #include <stddef.h>
! 2: #include <sys/socket.h>
! 3: #include <netinet/in.h>
! 4: #include <arpa/inet.h>
! 5:
! 6: void *sockaddr_addr_offset(const void *x)
! 7: {
! 8: if( x == NULL )
! 9: return NULL;
! 10:
! 11: if( ((struct sockaddr *)(x))->sa_family == AF_INET )
! 12: {
! 13: return ((void *)(x) + offsetof(struct sockaddr_in, sin_addr));
! 14: }else
! 15: if( ((struct sockaddr *)(x))->sa_family == AF_INET6 )
! 16: {
! 17: return ((void *)(x) + offsetof(struct sockaddr_in6, sin6_addr));
! 18: }
! 19:
! 20: return NULL;
! 21: }
! 22:
! 23: unsigned int sockaddr_addr_size(const void *x)
! 24: {
! 25: if( x == NULL )
! 26: return 0;
! 27: if( ((struct sockaddr *)(x))->sa_family == AF_INET )
! 28: {
! 29: return sizeof(struct in_addr);
! 30: }else
! 31: if( ((struct sockaddr *)(x))->sa_family == AF_INET6 )
! 32: {
! 33: return sizeof(struct in6_addr);
! 34: }
! 35: return 0;
! 36: }
! 37:
! 38:
! 39: unsigned int sockaddr_size(const void *x)
! 40: {
! 41: if( x == NULL )
! 42: return 0;
! 43: if( ((struct sockaddr *)(x))->sa_family == AF_INET )
! 44: {
! 45: return sizeof(struct sockaddr_in);
! 46: }else
! 47: if( ((struct sockaddr *)(x))->sa_family == AF_INET6 )
! 48: {
! 49: return sizeof(struct sockaddr_in6);
! 50: }
! 51: return 0;
! 52: }
! 53:
! 54: in_port_t *sockaddr_port_offset(const void *x)
! 55: {
! 56: if( x == NULL )
! 57: return NULL;
! 58:
! 59: if( ((struct sockaddr *)(x))->sa_family == AF_INET )
! 60: {
! 61: return ((void *)(x) + offsetof(struct sockaddr_in, sin_port));
! 62: }else
! 63: if( ((struct sockaddr *)(x))->sa_family == AF_INET6 )
! 64: {
! 65: return ((void *)(x) + offsetof(struct sockaddr_in6, sin6_port));
! 66: }
! 67:
! 68: return NULL;
! 69: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>