File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / mtr / packet / sockaddr.c
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Sep 27 11:18:58 2023 UTC (8 months, 4 weeks ago) by misho
Branches: mtr, MAIN
CVS tags: v0_95, HEAD
Version 0.95

    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>