1 /* $NetBSD: rtsock_14.c,v 1.1.2.1 2008/03/29 20:50:33 christos Exp $ */
4 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the project nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * Copyright (c) 1988, 1991, 1993
34 * The Regents of the University of California. All rights reserved.
36 * Redistribution and use in source and binary forms, with or without
37 * modification, are permitted provided that the following conditions
39 * 1. Redistributions of source code must retain the above copyright
40 * notice, this list of conditions and the following disclaimer.
41 * 2. Redistributions in binary form must reproduce the above copyright
42 * notice, this list of conditions and the following disclaimer in the
43 * documentation and/or other materials provided with the distribution.
44 * 3. Neither the name of the University nor the names of its contributors
45 * may be used to endorse or promote products derived from this software
46 * without specific prior written permission.
48 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
49 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
51 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
52 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
53 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
54 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
55 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
56 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
60 * @(#)rtsock.c 8.7 (Berkeley) 10/12/95
63 #include <sys/cdefs.h>
64 __KERNEL_RCSID(0, "$NetBSD: rtsock_14.c,v 1.1.2.1 2008/03/29 20:50:33 christos Exp $");
68 #include <sys/param.h>
69 #include <sys/systm.h>
72 #include <sys/socket.h>
73 #include <sys/socketvar.h>
74 #include <sys/domain.h>
75 #include <sys/protosw.h>
76 #include <sys/sysctl.h>
77 #include <sys/kauth.h>
79 #include <netinet/in.h>
80 #endif /* RTSOCK_DEBUG */
83 #include <net/route.h>
84 #include <net/raw_cb.h>
86 #include <machine/stdarg.h>
88 #include <compat/net/if.h>
91 compat_14_rt_ifmsg(struct ifnet
*ifp
, struct if_msghdr
*ifm
)
93 struct if_msghdr14 oifm
;
95 struct rt_addrinfo info
;
98 if (route_cb
.any_count
== 0)
100 (void)memset(&info
, 0, sizeof(info
));
101 (void)memset(&oifm
, 0, sizeof(oifm
));
102 oifm
.ifm_index
= ifp
->if_index
;
103 oifm
.ifm_flags
= ifp
->if_flags
;
104 oifm
.ifm_data
.ifi_type
= ifp
->if_data
.ifi_type
;
105 oifm
.ifm_data
.ifi_addrlen
= ifp
->if_data
.ifi_addrlen
;
106 oifm
.ifm_data
.ifi_hdrlen
= ifp
->if_data
.ifi_hdrlen
;
107 oifm
.ifm_data
.ifi_mtu
= ifp
->if_data
.ifi_mtu
;
108 oifm
.ifm_data
.ifi_metric
= ifp
->if_data
.ifi_metric
;
109 oifm
.ifm_data
.ifi_baudrate
= ifp
->if_data
.ifi_baudrate
;
110 oifm
.ifm_data
.ifi_ipackets
= ifp
->if_data
.ifi_ipackets
;
111 oifm
.ifm_data
.ifi_ierrors
= ifp
->if_data
.ifi_ierrors
;
112 oifm
.ifm_data
.ifi_opackets
= ifp
->if_data
.ifi_opackets
;
113 oifm
.ifm_data
.ifi_oerrors
= ifp
->if_data
.ifi_oerrors
;
114 oifm
.ifm_data
.ifi_collisions
= ifp
->if_data
.ifi_collisions
;
115 oifm
.ifm_data
.ifi_ibytes
= ifp
->if_data
.ifi_ibytes
;
116 oifm
.ifm_data
.ifi_obytes
= ifp
->if_data
.ifi_obytes
;
117 oifm
.ifm_data
.ifi_imcasts
= ifp
->if_data
.ifi_imcasts
;
118 oifm
.ifm_data
.ifi_omcasts
= ifp
->if_data
.ifi_omcasts
;
119 oifm
.ifm_data
.ifi_iqdrops
= ifp
->if_data
.ifi_iqdrops
;
120 oifm
.ifm_data
.ifi_noproto
= ifp
->if_data
.ifi_noproto
;
121 TIMESPEC_TO_TIMEVAL(&tv
, &ifp
->if_data
.ifi_lastchange
);
122 timeval_to_timeval50(&tv
, &oifm
.ifm_data
.ifi_lastchange
);
124 m
= rt_msg1(RTM_OOIFINFO
, &info
, (void *)&oifm
, sizeof(oifm
));
131 compat_14_iflist(struct ifnet
*ifp
, struct rt_walkarg
*w
,
132 struct rt_addrinfo
*info
, size_t len
)
134 struct if_msghdr14
*ifm
;
138 ifm
= (struct if_msghdr14
*)w
->w_tmem
;
139 ifm
->ifm_index
= ifp
->if_index
;
140 ifm
->ifm_flags
= ifp
->if_flags
;
141 ifm
->ifm_data
.ifi_type
= ifp
->if_data
.ifi_type
;
142 ifm
->ifm_data
.ifi_addrlen
= ifp
->if_data
.ifi_addrlen
;
143 ifm
->ifm_data
.ifi_hdrlen
= ifp
->if_data
.ifi_hdrlen
;
144 ifm
->ifm_data
.ifi_mtu
= ifp
->if_data
.ifi_mtu
;
145 ifm
->ifm_data
.ifi_metric
= ifp
->if_data
.ifi_metric
;
146 ifm
->ifm_data
.ifi_baudrate
= ifp
->if_data
.ifi_baudrate
;
147 ifm
->ifm_data
.ifi_ipackets
= ifp
->if_data
.ifi_ipackets
;
148 ifm
->ifm_data
.ifi_ierrors
= ifp
->if_data
.ifi_ierrors
;
149 ifm
->ifm_data
.ifi_opackets
= ifp
->if_data
.ifi_opackets
;
150 ifm
->ifm_data
.ifi_oerrors
= ifp
->if_data
.ifi_oerrors
;
151 ifm
->ifm_data
.ifi_collisions
= ifp
->if_data
.ifi_collisions
;
152 ifm
->ifm_data
.ifi_ibytes
= ifp
->if_data
.ifi_ibytes
;
153 ifm
->ifm_data
.ifi_obytes
= ifp
->if_data
.ifi_obytes
;
154 ifm
->ifm_data
.ifi_imcasts
= ifp
->if_data
.ifi_imcasts
;
155 ifm
->ifm_data
.ifi_omcasts
= ifp
->if_data
.ifi_omcasts
;
156 ifm
->ifm_data
.ifi_iqdrops
= ifp
->if_data
.ifi_iqdrops
;
157 ifm
->ifm_data
.ifi_noproto
= ifp
->if_data
.ifi_noproto
;
158 TIMESPEC_TO_TIMEVAL(&tv
, &ifp
->if_data
.ifi_lastchange
);
159 timeval_to_timeval50(&tv
, &ifm
->ifm_data
.ifi_lastchange
);
160 ifm
->ifm_addrs
= info
->rti_addrs
;
161 error
= copyout(ifm
, w
->w_where
, len
);
164 w
->w_where
= (char *)w
->w_where
+ len
;