2 * Copyright (c) 1997-1998 University of Utah and the Flux Group.
5 * This file is part of the Flux OSKit. The OSKit is free software, also known
6 * as "open source;" you can redistribute it and/or modify it under the terms
7 * of the GNU General Public License (GPL), version 2, as published by the Free
8 * Software Foundation (FSF). To explore alternate licensing terms, contact
9 * the University of Utah at csl-dist@cs.utah.edu or +1-801-585-3271.
11 * The OSKit is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13 * FOR A PARTICULAR PURPOSE. See the GPL for more details. You should have
14 * received a copy of the GPL along with the OSKit; see the file COPYING. If
15 * not, write to the FSF, 59 Temple Place #330, Boston, MA 02111-1307, USA.
21 struct ifaddr
**ifnet_addrs
;
23 int ifqmaxlen
= OSK_IFQ_MAXLEN
;
27 * Network interface utility routines.
29 * Routines with ifa_ifwith* names take sockaddr *'s as
33 POSK_IFADDR
TCPGetInterfaceData( PIP_INTERFACE IF
) {
35 POSK_IFADDR ifaddr
= IF
->TCPContext
;
36 struct sockaddr_in
*addr_in
;
37 struct sockaddr_in
*dstaddr_in
;
40 RtlZeroMemory(ifaddr
, sizeof(OSK_IFADDR
) + 2 * sizeof( struct sockaddr_in
));
42 addr_in
= (struct sockaddr_in
*)&ifaddr
[1];
43 dstaddr_in
= (struct sockaddr_in
*)&addr_in
[1];
45 TI_DbgPrint(DEBUG_TCPIF
,("Called\n"));
47 ifaddr
->ifa_dstaddr
= (struct sockaddr
*)dstaddr_in
;
49 /* XXX - Point-to-point interfaces not supported yet */
50 memset( &ifaddr
->ifa_dstaddr
, 0, sizeof( struct sockaddr
) );
52 ifaddr
->ifa_addr
= (struct sockaddr
*)addr_in
;
53 Status
= GetInterfaceIPv4Address( IF
,
55 (PULONG
)&addr_in
->sin_addr
.s_addr
);
57 ASSERT(NT_SUCCESS(Status
));
59 TI_DbgPrint(DEBUG_TCPIF
,("interface %x : addr %x\n",
60 IF
, addr_in
->sin_addr
.s_addr
));
62 ifaddr
->ifa_flags
= 0; /* XXX what goes here? */
63 ifaddr
->ifa_refcnt
= 0; /* Anachronistic */
64 ifaddr
->ifa_metric
= 1; /* We can get it like in ninfo.c, if we want */
65 ifaddr
->ifa_mtu
= IF
->MTU
;
67 TI_DbgPrint(DEBUG_TCPIF
,("Leaving\n"));
72 POSK_IFADDR
TCPFindInterface( void *ClientData
,
75 OSK_SOCKADDR
*ReqAddr
,
76 OSK_IFADDR
*Interface
) {
78 IP_ADDRESS Destination
;
79 struct sockaddr_in
*addr_in
= (struct sockaddr_in
*)ReqAddr
;
80 POSK_IFADDR InterfaceData
;
82 TI_DbgPrint(DEBUG_TCPIF
,("called for type %d\n", FindType
));
85 TI_DbgPrint(DEBUG_TCPIF
,("no addr or no ifaddr (%x)\n", ReqAddr
));
89 Destination
.Type
= IP_ADDRESS_V4
;
90 Destination
.Address
.IPv4Address
= addr_in
->sin_addr
.s_addr
;
92 TI_DbgPrint(DEBUG_TCPIF
,("Address is %x\n", addr_in
->sin_addr
.s_addr
));
94 IF
= FindOnLinkInterface(&Destination
);
97 InterfaceData
= TCPGetInterfaceData(IF
);
99 addr_in
= (struct sockaddr_in
*)
100 InterfaceData
->ifa_addr
;
102 TI_DbgPrint(DEBUG_TCPIF
,("returning addr %x\n", addr_in
->sin_addr
.s_addr
));
104 return InterfaceData
;