/***
*
*	Copyright (c) 1996-2002, Valve LLC. All rights reserved.
*
*	This product contains software technology licensed from Id
*	Software, Inc. ("Id Technology").  Id Technology (c) 1996 Id Software, Inc.
*	All Rights Reserved.
*
*   Use, distribution, and modification of this source code and/or resulting
*   object code is restricted to non-commercial enhancements to products from
*   Valve LLC.  All other use, distribution, or modification is prohibited
*   without written permission from Valve LLC.
*
****/

#ifndef NETADR_H
#define NETADR_H

#include "build.h"
#include STDINT_H

typedef enum
{
	NA_UNUSED = 0,
	NA_LOOPBACK,
	NA_BROADCAST,
	NA_IP,
	NA_IPX,
	NA_BROADCAST_IPX,
	NA_IP6,
	NA_MULTICAST_IP6, // all nodes multicast
} netadrtype_t;

// Original structure:
// typedef struct netadr_s
// {
// 	netadrtype_t	type;
// 	unsigned char	ip[4];
// 	unsigned char	ipx[10];
// 	unsigned short	port;
// } netadr_t;

#pragma pack( push, 1 )
typedef struct netadr_s
{
	union
	{
		struct
		{
			uint32_t type;
			union
			{
				uint8_t   ip[4];
				uint32_t  ip4;
			};
			uint8_t  ipx[10];
		};
		struct
		{
#if XASH_LITTLE_ENDIAN
			uint16_t type6;
			uint8_t ip6[16];
#elif XASH_BIG_ENDIAN
			uint8_t ip6_0[2];
			uint16_t type6;
			uint8_t ip6_2[14];
#endif
		};
	};
	uint16_t port;
} netadr_t;
#pragma pack( pop )

STATIC_ASSERT( sizeof( netadr_t ) == 20, "invalid netadr_t size" );

#endif//NETADR_H