241 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			241 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|     Redistribution and use in source and binary forms, with or without
 | |
|     modification, are permitted provided that the following conditions
 | |
|     are met:
 | |
|     1. Redistributions of source code must retain the above copyright
 | |
|        notice, this list of conditions and the following disclaimer.
 | |
|     2. Redistributions in binary form must reproduce the above copyright
 | |
|        notice, this list of conditions and the following disclaimer in the
 | |
|        documentation and/or other materials provided with the distribution.
 | |
| 
 | |
|     THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
 | |
|     IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | |
|     OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 | |
|     IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 | |
|     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | |
|     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | |
|     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | |
|     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | |
|     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 | |
|     THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
|  */
 | |
| 
 | |
| #ifndef _HAWK_SKAD_H_
 | |
| #define _HAWK_SKAD_H_
 | |
| 
 | |
| #include <hawk-cmn.h>
 | |
| 
 | |
| #define HAWK_SIZEOF_SKAD_T 1
 | |
| #if (HAWK_SIZEOF_STRUCT_SOCKADDR_IN > HAWK_SIZEOF_SKAD_T)
 | |
| #	undef HAWK_SIZEOF_SKAD_T
 | |
| #	define HAWK_SIZEOF_SKAD_T HAWK_SIZEOF_STRUCT_SOCKADDR_IN
 | |
| #endif
 | |
| #if (HAWK_SIZEOF_STRUCT_SOCKADDR_IN6 > HAWK_SIZEOF_SKAD_T)
 | |
| #	undef HAWK_SIZEOF_SKAD_T
 | |
| #	define HAWK_SIZEOF_SKAD_T HAWK_SIZEOF_STRUCT_SOCKADDR_IN6
 | |
| #endif
 | |
| #if (HAWK_SIZEOF_STRUCT_SOCKADDR_LL > HAWK_SIZEOF_SKAD_T)
 | |
| #	undef HAWK_SIZEOF_SKAD_T
 | |
| #	define HAWK_SIZEOF_SKAD_T HAWK_SIZEOF_STRUCT_SOCKADDR_LL
 | |
| #endif
 | |
| #if (HAWK_SIZEOF_STRUCT_SOCKADDR_DL > HAWK_SIZEOF_SKAD_T)
 | |
| #	undef HAWK_SIZEOF_SKAD_T
 | |
| #	define HAWK_SIZEOF_SKAD_T HAWK_SIZEOF_STRUCT_SOCKADDR_DL
 | |
| #endif
 | |
| #if (HAWK_SIZEOF_STRUCT_SOCKADDR_UN > HAWK_SIZEOF_SKAD_T)
 | |
| #	undef HAWK_SIZEOF_SKAD_T
 | |
| #	define HAWK_SIZEOF_SKAD_T HAWK_SIZEOF_STRUCT_SOCKADDR_UN
 | |
| #endif
 | |
| 
 | |
| #if (HAWK_SIZEOF_SA_FAMILY_T == 1) && !defined(HAWK_SA_FAMILY_T_IS_SIGNED)
 | |
| #	if !defined(HAWK_AF_UNIX)
 | |
| #		define HAWK_AF_UNIX (254)
 | |
| #	endif
 | |
| #elif (HAWK_SIZEOF_SA_FAMILY_T == 1) && defined(HAWK_SA_FAMILY_T_IS_SIGNED)
 | |
| #	if !defined(HAWK_AF_UNIX)
 | |
| #		define HAWK_AF_UNIX (-2)
 | |
| #	endif
 | |
| #else
 | |
| #	if !defined(HAWK_AF_UNIX)
 | |
| 		/* this is a fake value */
 | |
| #		define HAWK_AF_UNIX (65534)
 | |
| #	endif
 | |
| #endif
 | |
| 
 | |
| struct hawk_skad_t
 | |
| {
 | |
| 	hawk_uint8_t data[HAWK_SIZEOF_SKAD_T];
 | |
| };
 | |
| typedef struct hawk_skad_t hawk_skad_t;
 | |
| 
 | |
| #define HAWK_IP4AD_STRLEN (15) /* not including the terminating '\0' */
 | |
| #define HAWK_IP6AD_STRLEN (45) /* not including the terminating '\0'. pure IPv6 address, not including the scope(e.g. %10, %eth0) */
 | |
| 
 | |
| /* size large enough to hold the ip address plus port number.
 | |
|  * [IPV6ADDR%SCOPE]:PORT -> 9 for [] % : and PORT
 | |
|  * Let's reserve 16 for SCOPE and not include the terminting '\0'
 | |
|  */
 | |
| #define HAWK_SKAD_IP_STRLEN (HAWK_IP6AD_STRLEN + 25)
 | |
| 
 | |
| /* -------------------------------------------------------------------- */
 | |
| 
 | |
| #define HAWK_ETHAD_LEN (6)
 | |
| #define HAWK_IP4AD_LEN (4)
 | |
| #define HAWK_IP6AD_LEN (16)
 | |
| 
 | |
| #include <hawk-pac1.h>
 | |
| struct HAWK_PACKED hawk_ethad_t
 | |
| {
 | |
| 	hawk_uint8_t v[HAWK_ETHAD_LEN];
 | |
| };
 | |
| typedef struct hawk_ethad_t hawk_ethad_t;
 | |
| 
 | |
| struct HAWK_PACKED hawk_ip4ad_t
 | |
| {
 | |
| 	hawk_uint8_t v[HAWK_IP4AD_LEN];
 | |
| };
 | |
| typedef struct hawk_ip4ad_t hawk_ip4ad_t;
 | |
| 
 | |
| struct HAWK_PACKED hawk_ip6ad_t
 | |
| {
 | |
| 	hawk_uint8_t v[HAWK_IP6AD_LEN];
 | |
| };
 | |
| typedef struct hawk_ip6ad_t hawk_ip6ad_t;
 | |
| #include <hawk-upac.h>
 | |
| 
 | |
| #if defined(__cplusplus)
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| HAWK_EXPORT void hawk_skad_init_for_ip4 (
 | |
| 	hawk_skad_t*        skad,
 | |
| 	hawk_uint16_t       port,
 | |
| 	hawk_ip4ad_t*       ip4ad
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT void hawk_skad_init_for_ip6 (
 | |
| 	hawk_skad_t*        skad,
 | |
| 	hawk_uint16_t       port,
 | |
| 	hawk_ip6ad_t*       ip6ad,
 | |
| 	int                scope_id
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT void hawk_skad_init_for_ip_with_bytes (
 | |
| 	hawk_skad_t*        skad,
 | |
| 	hawk_uint16_t       port,
 | |
| 	const hawk_uint8_t* bytes,
 | |
| 	hawk_oow_t          len
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT void hawk_skad_init_for_eth (
 | |
| 	hawk_skad_t*        skad,
 | |
| 	int                ifindex,
 | |
| 	hawk_ethad_t*       ethad
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT int hawk_skad_get_family (
 | |
| 	const hawk_skad_t* skad
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT int hawk_skad_get_size (
 | |
| 	const hawk_skad_t* skad
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT int hawk_skad_get_port (
 | |
| 	const hawk_skad_t* skad
 | |
| );
 | |
| 
 | |
| /* for link-level addresses */
 | |
| HAWK_EXPORT int hawk_skad_get_ifindex (
 | |
| 	const hawk_skad_t* skad
 | |
| );
 | |
| 
 | |
| /* for ipv6 */
 | |
| HAWK_EXPORT int hawk_skad_get_scope_id (
 | |
| 	const hawk_skad_t* skad
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT void hawk_skad_set_scope_id (
 | |
| 	hawk_skad_t*       skad,
 | |
| 	int               scope_id
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT hawk_oow_t hawk_skad_get_ipad_bytes (
 | |
| 	hawk_skad_t*       skad,
 | |
| 	void*              buf,
 | |
| 	hawk_oow_t         len
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT void hawk_clear_skad (
 | |
| 	hawk_skad_t*       skad
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT int hawk_equal_skads (
 | |
| 	const hawk_skad_t* addr1,
 | |
| 	const hawk_skad_t* addr2,
 | |
| 	int                strict
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT hawk_oow_t hawk_ipad_bytes_to_ucstr (
 | |
| 	const hawk_uint8_t* iptr,
 | |
| 	hawk_oow_t          ilen,
 | |
| 	hawk_uch_t*         buf,
 | |
| 	hawk_oow_t          blen
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT hawk_oow_t hawk_ipad_bytes_to_bcstr (
 | |
| 	const hawk_uint8_t* iptr,
 | |
| 	hawk_oow_t          ilen,
 | |
| 	hawk_bch_t*         buf,
 | |
| 	hawk_oow_t          blen
 | |
| );
 | |
| 
 | |
| 
 | |
| HAWK_EXPORT int hawk_uchars_to_ipad_bytes (
 | |
| 	const hawk_uch_t*   str,
 | |
| 	hawk_oow_t          slen,
 | |
| 	hawk_uint8_t*       buf,
 | |
| 	hawk_oow_t          blen
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT int hawk_bchars_to_ipad_bytes (
 | |
| 	const hawk_bch_t*   str,
 | |
| 	hawk_oow_t          slen,
 | |
| 	hawk_uint8_t*       buf,
 | |
| 	hawk_oow_t          blen
 | |
| );
 | |
| 
 | |
| #define hawk_ucstr_to_ipad_bytes(str,buf,blen) hawk_uchars_to_ipad_bytes(str, hawk_count_ucstr(str,buf,len)
 | |
| #define hawk_bcstr_to_ipad_bytes(str,buf,blen) hawk_bchars_to_ipad_bytes(str, hawk_count_bcstr(str,buf,len)
 | |
| 
 | |
| #if defined(HAWK_OOCH_IS_UCH)
 | |
| #	define hawk_ipad_bytes_to_oocstr hawk_ipad_bytes_to_ucstr
 | |
| #	define hawk_oochars_to_ipad_bytes hawk_uchars_to_ipad_bytes
 | |
| #	define hawk_oocstr_to_ipad_bytes hawk_ucstr_to_ipad_bytes
 | |
| #else
 | |
| #	define hawk_ipad_bytes_to_oocstr hawk_ipad_bytes_to_bcstr
 | |
| #	define hawk_oochars_to_ipad_bytes hawk_bchars_to_ipad_bytes
 | |
| #	define hawk_oocstr_to_ipad_bytes hawk_bcstr_to_ipad_bytes
 | |
| #endif
 | |
| 
 | |
| HAWK_EXPORT int hawk_ipad_bytes_is_v4_mapped (
 | |
| 	const hawk_uint8_t* iptr,
 | |
| 	hawk_oow_t          ilen
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT int hawk_ipad_bytes_is_loop_back (
 | |
| 	const hawk_uint8_t* iptr,
 | |
| 	hawk_oow_t          ilen
 | |
| );
 | |
| 
 | |
| HAWK_EXPORT int hawk_ipad_bytes_is_link_local (
 | |
| 	const hawk_uint8_t* iptr,
 | |
| 	hawk_oow_t          ilen
 | |
| );
 | |
| 
 | |
| #if defined(__cplusplus)
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif
 |