Ver código fonte

Add local address to socket openers.

tags/v0.9.3
Michael Brown 17 anos atrás
pai
commit
5e25a89e74
2 arquivos alterados com 15 adições e 7 exclusões
  1. 9
    4
      src/core/open.c
  2. 6
    3
      src/include/gpxe/open.h

+ 9
- 4
src/core/open.c Ver arquivo

77
  * @v xfer		Data transfer interface
77
  * @v xfer		Data transfer interface
78
  * @v domain		Communication domain (e.g. PF_INET)
78
  * @v domain		Communication domain (e.g. PF_INET)
79
  * @v type		Communication semantics (e.g. SOCK_STREAM)
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
 int xfer_open_socket ( struct xfer_interface *xfer,
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
 	struct socket_opener *opener;
87
 	struct socket_opener *opener;
84
 
88
 
85
 	DBGC ( xfer, "XFER %p opening (%s,%s) socket\n", xfer,
89
 	DBGC ( xfer, "XFER %p opening (%s,%s) socket\n", xfer,
88
 	for ( opener = socket_openers; opener < socket_openers_end; opener++ ){
92
 	for ( opener = socket_openers; opener < socket_openers_end; opener++ ){
89
 		if ( ( opener->domain == domain ) &&
93
 		if ( ( opener->domain == domain ) &&
90
 		     ( opener->type == type ) ) {
94
 		     ( opener->type == type ) ) {
91
-			return opener->open ( xfer, sa );
95
+			return opener->open ( xfer, peer, local );
92
 		}
96
 		}
93
 	}
97
 	}
94
 
98
 
115
 	case LOCATION_SOCKET: {
119
 	case LOCATION_SOCKET: {
116
 		int domain = va_arg ( args, int );
120
 		int domain = va_arg ( args, int );
117
 		int type = va_arg ( args, int );
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
 	default:
126
 	default:
122
 		DBGC ( xfer, "XFER %p attempted to open unsupported location "
127
 		DBGC ( xfer, "XFER %p attempted to open unsupported location "
123
 		       "type %d\n", xfer, type );
128
 		       "type %d\n", xfer, type );

+ 6
- 3
src/include/gpxe/open.h Ver arquivo

63
 	/** Open socket
63
 	/** Open socket
64
 	 *
64
 	 *
65
 	 * @v xfer		Data transfer interface
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
 	 * @ret rc		Return status code
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
 /** Register a socket opener */
74
 /** Register a socket opener */
75
 extern int xfer_open_uri ( struct xfer_interface *xfer,
77
 extern int xfer_open_uri ( struct xfer_interface *xfer,
76
 			   const char *uri_string );
78
 			   const char *uri_string );
77
 extern int xfer_open_socket ( struct xfer_interface *xfer,
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
 extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args );
82
 extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args );
80
 extern int xfer_open ( struct xfer_interface *xfer, int type, ... );
83
 extern int xfer_open ( struct xfer_interface *xfer, int type, ... );
81
 
84
 

Carregando…
Cancelar
Salvar