/branches/network/uspace/srv/net/inet.c |
---|
0,0 → 1,109 |
/* |
* Copyright (c) 2009 Lukas Mejdrech |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - 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. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* 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. |
*/ |
/** @addtogroup net |
* @{ |
*/ |
/** @file |
* Internet protocol address conversion functions implementation. |
*/ |
#include <errno.h> |
#include <mem.h> |
#include <stdio.h> |
#include "include/inet.h" |
#include "include/socket.h" |
int inet_pton( uint16_t family, const char * address, uint8_t * data ){ |
const char * next; |
char * last; |
int index; |
int count; |
int base; |
size_t bytes; |
size_t shift; |
unsigned long value; |
if( ! data ) return EINVAL; |
switch( family ){ |
case AF_INET: |
count = 4; |
base = 10; |
bytes = 1; |
break; |
case AF_INET6: |
count = 16; |
base = 16; |
bytes = 4; |
break; |
default: |
return ENOTSUP; |
} |
if( ! address ){ |
bzero( data, count ); |
return ENOENT; |
} |
next = address; |
index = 0; |
do{ |
if( next && ( * next )){ |
if( index ) ++ next; |
value = strtoul( next, & last, base ); |
next = last; |
shift = bytes - 1; |
do{ |
// like little endian |
data[ index + shift ] = value; |
value >>= 8; |
}while( shift -- ); |
index += bytes; |
}else{ |
bzero( data + index, count - index ); |
return EOK; |
} |
}while( index < count ); |
return EOK; |
} |
int inet_ntop( uint16_t family, const uint8_t * data, char * address, size_t length ){ |
if(( ! data ) || ( ! address )) return EINVAL; |
switch( family ){ |
case AF_INET: if( length < INET_ADDRSTRLEN ) return ENOMEM; |
snprintf( address, length, "%hhu.%hhu.%hhu.%hhu", data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ] ); |
return EOK; |
case AF_INET6: if( length < INET6_ADDRSTRLEN ) return ENOMEM; |
snprintf( address, length, "%hhx%hhx:%hhx%hhx:%hhx%hhx:%hhx%hhx:%hhx%hhx:%hhx%hhx:%hhx%hhx:%hhx%hhx", data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ], data[ 8 ], data[ 9 ], data[ 10 ], data[ 11 ], data[ 12 ], data[ 13 ], data[ 14 ], data[ 15 ] ); |
return EOK; |
default: return ENOTSUP; |
} |
} |
/** @} |
*/ |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
Added: svn:mergeinfo |
/branches/network/uspace/srv/net/include/in6.h |
---|
0,0 → 1,65 |
/* |
* Copyright (c) 2009 Lukas Mejdrech |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - 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. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* 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. |
*/ |
/** @addtogroup net |
* @{ |
*/ |
/** @file |
* |
*/ |
#ifndef __NET_IN6_H__ |
#define __NET_IN6_H__ |
#include <sys/types.h> |
#include "ip_protocols.h" |
#include "inet.h" |
#define INET6_ADDRSTRLEN ( 8 * 4 + 7 + 1 ) |
typedef struct in6_addr in6_addr_t; |
typedef struct sockaddr_in6 sockaddr_in6_t; |
struct in6_addr{ |
unsigned char s6_addr[ 16 ]; // IPv6 address |
}; |
struct sockaddr_in6{ |
uint16_t sin6_family; // address family, AF_INET6 |
uint16_t sin6_port; // port number, Network Byte Order |
uint32_t sin6_flowinfo; // IPv6 flow information |
struct in6_addr sin6_addr; // IPv6 address |
uint32_t sin6_scope_id; // Scope ID |
}; |
#endif |
/** @} |
*/ |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/branches/network/uspace/srv/net/include/inet.h |
---|
0,0 → 1,77 |
/* |
* Copyright (c) 2009 Lukas Mejdrech |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - 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. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* 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. |
*/ |
/** @addtogroup net |
* @{ |
*/ |
/** @file |
* |
*/ |
#ifndef __NET_INET_H__ |
#define __NET_INET_H__ |
#include <sys/types.h> |
#include "byteorder.h" |
typedef struct sockaddr sockaddr_t; |
typedef struct addrinfo addrinfo_t; |
int inet_ntop( uint16_t family, const uint8_t * data, char * address, size_t length ); |
int inet_pton( uint16_t family, const char * address, uint8_t * data ); |
struct sockaddr{ |
uint16_t sa_family; // address family, AF_xxx |
uint8_t sa_data[ 14 ]; // 14 bytes of protocol address |
}; |
struct addrinfo{ |
int ai_flags; // AI_PASSIVE, AI_CANONNAME, etc. |
uint16_t ai_family; // AF_INET, AF_INET6, AF_UNSPEC |
int ai_socktype; // SOCK_STREAM, SOCK_DGRAM |
int ai_protocol; // use 0 for "any" |
size_t ai_addrlen; // size of ai_addr in bytes |
struct sockaddr * ai_addr; // struct sockaddr_in or _in6 |
char * ai_canonname; // full canonical hostname |
struct addrinfo * ai_next; // linked list, next node |
}; |
/*int getaddrinfo(const char *node, // e.g. "www.example.com" or IP |
const char *service, // e.g. "http" or port number |
const struct addrinfo *hints, |
struct addrinfo **res); |
getnameinfo |
*/ |
#endif |
/** @} |
*/ |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
Added: svn:mergeinfo |
/branches/network/uspace/srv/net/include/in.h |
---|
0,0 → 1,64 |
/* |
* Copyright (c) 2009 Lukas Mejdrech |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - 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. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* 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. |
*/ |
/** @addtogroup net |
* @{ |
*/ |
/** @file |
* |
*/ |
#ifndef __NET_IN_H__ |
#define __NET_IN_H__ |
#include <sys/types.h> |
#include "ip_protocols.h" |
#include "inet.h" |
#define INET_ADDRSTRLEN ( 4 * 3 + 3 + 1 ) |
typedef struct in_addr in_addr_t; |
typedef struct sockaddr_in sockaddr_in_t; |
struct in_addr{ |
uint32_t s_addr; // that's a 32-bit int (4 bytes) |
}; |
struct sockaddr_in{ |
uint16_t sin_family; // Address family, AF_INET |
uint16_t sin_port; // Port number |
struct in_addr sin_addr; // Internet address |
uint8_t sin_zero[ 8 ]; // Same size as struct sockaddr |
}; |
#endif |
/** @} |
*/ |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/branches/network/uspace/srv/net/net/Makefile |
---|
57,7 → 57,7 |
$(NET_BASE)il/arp/arp.c \ |
$(NET_BASE)il/ip/ip.c \ |
$(NET_BASE)il/ip/ip_client.c \ |
$(NET_BASE)sockaddr.c \ |
$(NET_BASE)inet.c \ |
$(NET_BASE)tl/tcp/tcp.c \ |
$(NET_BASE)tl/udp/udp.c |
/branches/network/uspace/srv/net/il/ip/Makefile |
---|
47,7 → 47,7 |
$(STRUCTURES)module_map.c \ |
$(STRUCTURES)packet/packet.c \ |
$(STRUCTURES)/packet/packet_client.c \ |
$(NET_BASE)sockaddr.c \ |
$(NET_BASE)inet.c \ |
$(STRUCTURES)/packet/packet_remote.c \ |
$(NET_BASE)il/arp/arp_remote.c \ |
$(NET_BASE)nil/nil_remote.c \ |