diff options
| author | Michael Brown | 2013-10-21 15:04:06 +0200 |
|---|---|---|
| committer | Michael Brown | 2013-10-21 15:34:03 +0200 |
| commit | b6a9152f8c48a3ab9a337e1f40d0cb390c7d533d (patch) | |
| tree | 6be3f69246e2b46ee60f56f30708a024a4939d41 /src/include | |
| parent | [netdevice] Add find_netdev_by_index() (diff) | |
| download | ipxe-b6a9152f8c48a3ab9a337e1f40d0cb390c7d533d.tar.gz ipxe-b6a9152f8c48a3ab9a337e1f40d0cb390c7d533d.tar.xz ipxe-b6a9152f8c48a3ab9a337e1f40d0cb390c7d533d.zip | |
[socket] Add concept of a generalised socket address converter
Add sock_aton() and sock_ntoa() to allow for parsing and transcription
of arbitrary socket addresses.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/ipxe/errfile.h | 1 | ||||
| -rw-r--r-- | src/include/ipxe/socket.h | 36 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/include/ipxe/errfile.h b/src/include/ipxe/errfile.h index 83675796c..c55107a9a 100644 --- a/src/include/ipxe/errfile.h +++ b/src/include/ipxe/errfile.h @@ -215,6 +215,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #define ERRFILE_mount ( ERRFILE_NET | 0x00350000 ) #define ERRFILE_oncrpc_iob ( ERRFILE_NET | 0x00360000 ) #define ERRFILE_neighbour ( ERRFILE_NET | 0x00370000 ) +#define ERRFILE_socket ( ERRFILE_NET | 0x00380000 ) #define ERRFILE_image ( ERRFILE_IMAGE | 0x00000000 ) #define ERRFILE_elf ( ERRFILE_IMAGE | 0x00010000 ) diff --git a/src/include/ipxe/socket.h b/src/include/ipxe/socket.h index 320dae4f1..48d7ae1a8 100644 --- a/src/include/ipxe/socket.h +++ b/src/include/ipxe/socket.h @@ -10,6 +10,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <stdint.h> +#include <ipxe/tables.h> /** * @defgroup commtypes Communication semantics @@ -99,4 +100,39 @@ struct sockaddr { char pad[ SA_LEN - sizeof ( sa_family_t ) ]; } __attribute__ (( may_alias )); +/** + * Socket address converter + * + */ +struct sockaddr_converter { + /** Socket address family + * + * This is an AF_XXX constant. + */ + sa_family_t family; + /** Transcribe socket address + * + * @v sa Socket address + * @ret string Socket address string + */ + const char * ( * ntoa ) ( struct sockaddr *sa ); + /** Parse socket address + * + * @v string Socket address stringh + * @v sa Socket address to fill in + * @ret rc Return status code + */ + int ( * aton ) ( const char *string, struct sockaddr *sa ); +}; + +/** Socket address converter table */ +#define SOCKADDR_CONVERTERS \ + __table ( struct sockaddr_converter, "sockaddr_converters" ) + +/** Declare a socket address converter */ +#define __sockaddr_converter __table_entry ( SOCKADDR_CONVERTERS, 01 ) + +extern const char * sock_ntoa ( struct sockaddr *sa ); +extern int sock_aton ( const char *string, struct sockaddr *sa ); + #endif /* _IPXE_SOCKET_H */ |
