Deleted Added
full compact
1/*
2 * Copyright (c) 1998, Larry Lile
3 * All rights reserved.
4 *
5 * For latest sources and information on this driver, please
6 * go to http://anarchy.stdio.com.
7 *
8 * Questions, comments or suggestions should be directed to

--- 16 unchanged lines hidden (view full) ---

25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * $FreeBSD: head/sys/net/if_iso88025subr.c 128615 2004-04-24 21:59:41Z luigi $
33 * $FreeBSD: head/sys/net/if_iso88025subr.c 128636 2004-04-25 09:24:52Z luigi $
34 *
35 */
36
37/*
38 *
39 * General ISO 802.5 (Token Ring) support routines
40 *
41 */

--- 212 unchanged lines hidden (view full) ---

254#endif
255
256 if (ifp->if_flags & IFF_MONITOR)
257 senderr(ENETDOWN);
258 if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING))
259 senderr(ENETDOWN);
260 getmicrotime(&ifp->if_lastchange);
261
262 /* Calculate routing info length based on arp table entry */
263 /* XXX any better way to do this ? */
264 error = rt_check(&rt, &rt0, dst);
265 if (error)
266 goto bad;
267
266 /* Calculate routing info length based on arp table entry */
268 if (rt && (sdl = (struct sockaddr_dl *)rt->rt_gateway))
269 if (SDL_ISO88025(sdl)->trld_rcf != 0)
270 rif_len = TR_RCF_RIFLEN(SDL_ISO88025(sdl)->trld_rcf);
271
272 /* Generate a generic 802.5 header for the packet */
273 gen_th.ac = TR_AC;
274 gen_th.fc = TR_LLC_FRAME;
275 (void)memcpy((caddr_t)gen_th.iso88025_shost, IFP2AC(ifp)->ac_enaddr,

--- 6 unchanged lines hidden (view full) ---

282 (caddr_t)SDL_ISO88025(sdl)->trld_route,
283 rif_len - 2);
284 }
285 }
286
287 switch (dst->sa_family) {
288#ifdef INET
289 case AF_INET:
289 if (!arpresolve(ifp, rt, m, dst, edst))
290 return (0); /* if not yet resolved */
290 error = arpresolve(ifp, rt0, m, dst, edst);
291 if (error)
292 return (error == EWOULDBLOCK ? 0 : error);
293 snap_type = ETHERTYPE_IP;
294 break;
295 case AF_ARP:
296 {
297 struct arphdr *ah;
298 ah = mtod(m, struct arphdr *);
299 ah->ar_hrd = htons(ARPHRD_IEEE802);
300

--- 16 unchanged lines hidden (view full) ---

317 else
318 bcopy(ar_tha(ah), edst, ISO88025_ADDR_LEN);
319
320 }
321 break;
322#endif /* INET */
323#ifdef INET6
324 case AF_INET6:
323 if (!nd6_storelladdr(ifp, rt, m, dst, (u_char *)edst)) {
324 /* Something bad happened */
325 return(0);
326 }
325 error = nd6_storelladdr(ifp, rt0, m, dst, (u_char *)edst);
326 if (error)
327 return (error);
328 snap_type = ETHERTYPE_IPV6;
329 break;
330#endif /* INET6 */
331#ifdef IPX
332 case AF_IPX:
333 {
334 u_int8_t *cp;
335

--- 448 unchanged lines hidden ---