Browse Source

Add local address to socket openers.

tags/v0.9.3
Michael Brown 17 years ago
parent
commit
5e25a89e74
2 changed files with 15 additions and 7 deletions
  1. 9
    4
      src/core/open.c
  2. 6
    3
      src/include/gpxe/open.h

+ 9
- 4
src/core/open.c View File

@@ -77,9 +77,13 @@ int xfer_open_uri ( struct xfer_interface *xfer, const char *uri_string ) {
77 77
  * @v xfer		Data transfer interface
78 78
  * @v domain		Communication domain (e.g. PF_INET)
79 79
  * @v type		Communication semantics (e.g. SOCK_STREAM)
80
+ * @v peer		Peer socket address
81
+ * @v local		Local socket address, or NULL
82
+ * @ret rc		Return status code
80 83
  */
81 84
 int xfer_open_socket ( struct xfer_interface *xfer,
82
-		       int domain, int type, struct sockaddr *sa ) {
85
+		       int domain, int type, struct sockaddr *peer,
86
+		       struct sockaddr *local ) {
83 87
 	struct socket_opener *opener;
84 88
 
85 89
 	DBGC ( xfer, "XFER %p opening (%s,%s) socket\n", xfer,
@@ -88,7 +92,7 @@ int xfer_open_socket ( struct xfer_interface *xfer,
88 92
 	for ( opener = socket_openers; opener < socket_openers_end; opener++ ){
89 93
 		if ( ( opener->domain == domain ) &&
90 94
 		     ( opener->type == type ) ) {
91
-			return opener->open ( xfer, sa );
95
+			return opener->open ( xfer, peer, local );
92 96
 		}
93 97
 	}
94 98
 
@@ -115,9 +119,10 @@ int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args ) {
115 119
 	case LOCATION_SOCKET: {
116 120
 		int domain = va_arg ( args, int );
117 121
 		int type = va_arg ( args, int );
118
-		struct sockaddr *sa = va_arg ( args, struct sockaddr * );
122
+		struct sockaddr *peer = va_arg ( args, struct sockaddr * );
123
+		struct sockaddr *local = va_arg ( args, struct sockaddr * );
119 124
 
120
-		return xfer_open_socket ( xfer, domain, type, sa ); }
125
+		return xfer_open_socket ( xfer, domain, type, peer, local ); }
121 126
 	default:
122 127
 		DBGC ( xfer, "XFER %p attempted to open unsupported location "
123 128
 		       "type %d\n", xfer, type );

+ 6
- 3
src/include/gpxe/open.h View File

@@ -63,10 +63,12 @@ struct socket_opener {
63 63
 	/** Open socket
64 64
 	 *
65 65
 	 * @v xfer		Data transfer interface
66
-	 * @v sa		Socket address
66
+	 * @v peer		Peer socket address
67
+	 * @v local		Local socket address, or NULL
67 68
 	 * @ret rc		Return status code
68 69
 	 */
69
-	int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *sa );
70
+	int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *peer,
71
+			 struct sockaddr *local );
70 72
 };
71 73
 
72 74
 /** Register a socket opener */
@@ -75,7 +77,8 @@ struct socket_opener {
75 77
 extern int xfer_open_uri ( struct xfer_interface *xfer,
76 78
 			   const char *uri_string );
77 79
 extern int xfer_open_socket ( struct xfer_interface *xfer,
78
-			      int domain, int type, struct sockaddr *sa );
80
+			      int domain, int type, struct sockaddr *peer,
81
+			      struct sockaddr *local );
79 82
 extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args );
80 83
 extern int xfer_open ( struct xfer_interface *xfer, int type, ... );
81 84
 

Loading…
Cancel
Save