From 5e25a89e7473827f81703038c650c0bb6fce7186 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sat, 19 May 2007 20:14:18 +0000 Subject: [PATCH] Add local address to socket openers. --- src/core/open.c | 13 +++++++++---- src/include/gpxe/open.h | 9 ++++++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/core/open.c b/src/core/open.c index af01b2b4..284d00a9 100644 --- a/src/core/open.c +++ b/src/core/open.c @@ -77,9 +77,13 @@ int xfer_open_uri ( struct xfer_interface *xfer, const char *uri_string ) { * @v xfer Data transfer interface * @v domain Communication domain (e.g. PF_INET) * @v type Communication semantics (e.g. SOCK_STREAM) + * @v peer Peer socket address + * @v local Local socket address, or NULL + * @ret rc Return status code */ int xfer_open_socket ( struct xfer_interface *xfer, - int domain, int type, struct sockaddr *sa ) { + int domain, int type, struct sockaddr *peer, + struct sockaddr *local ) { struct socket_opener *opener; DBGC ( xfer, "XFER %p opening (%s,%s) socket\n", xfer, @@ -88,7 +92,7 @@ int xfer_open_socket ( struct xfer_interface *xfer, for ( opener = socket_openers; opener < socket_openers_end; opener++ ){ if ( ( opener->domain == domain ) && ( opener->type == type ) ) { - return opener->open ( xfer, sa ); + return opener->open ( xfer, peer, local ); } } @@ -115,9 +119,10 @@ int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args ) { case LOCATION_SOCKET: { int domain = va_arg ( args, int ); int type = va_arg ( args, int ); - struct sockaddr *sa = va_arg ( args, struct sockaddr * ); + struct sockaddr *peer = va_arg ( args, struct sockaddr * ); + struct sockaddr *local = va_arg ( args, struct sockaddr * ); - return xfer_open_socket ( xfer, domain, type, sa ); } + return xfer_open_socket ( xfer, domain, type, peer, local ); } default: DBGC ( xfer, "XFER %p attempted to open unsupported location " "type %d\n", xfer, type ); diff --git a/src/include/gpxe/open.h b/src/include/gpxe/open.h index caa96f7e..229d2d78 100644 --- a/src/include/gpxe/open.h +++ b/src/include/gpxe/open.h @@ -63,10 +63,12 @@ struct socket_opener { /** Open socket * * @v xfer Data transfer interface - * @v sa Socket address + * @v peer Peer socket address + * @v local Local socket address, or NULL * @ret rc Return status code */ - int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *sa ); + int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *peer, + struct sockaddr *local ); }; /** Register a socket opener */ @@ -75,7 +77,8 @@ struct socket_opener { extern int xfer_open_uri ( struct xfer_interface *xfer, const char *uri_string ); extern int xfer_open_socket ( struct xfer_interface *xfer, - int domain, int type, struct sockaddr *sa ); + int domain, int type, struct sockaddr *peer, + struct sockaddr *local ); extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args ); extern int xfer_open ( struct xfer_interface *xfer, int type, ... );