summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/if_dl.h4
-rw-r--r--sys/net/if_iso88025subr.c9
-rw-r--r--sys/net/iso88025.h9
3 files changed, 15 insertions, 7 deletions
diff --git a/sys/net/if_dl.h b/sys/net/if_dl.h
index 2eb33dc..b9980bb 100644
--- a/sys/net/if_dl.h
+++ b/sys/net/if_dl.h
@@ -66,10 +66,8 @@ struct sockaddr_dl {
u_char sdl_nlen; /* interface name length, no trailing 0 reqd. */
u_char sdl_alen; /* link level address length */
u_char sdl_slen; /* link layer selector length */
- char sdl_data[12]; /* minimum work area, can be larger;
+ char sdl_data[46]; /* minimum work area, can be larger;
contains both if name and ll address */
- u_short sdl_rcf; /* source routing control */
- u_short sdl_route[16]; /* source routing information */
};
#define LLADDR(s) ((caddr_t)((s)->sdl_data + (s)->sdl_nlen))
diff --git a/sys/net/if_iso88025subr.c b/sys/net/if_iso88025subr.c
index f23f5ee..afb6f4e 100644
--- a/sys/net/if_iso88025subr.c
+++ b/sys/net/if_iso88025subr.c
@@ -253,8 +253,8 @@ iso88025_output(ifp, m, dst, rt0)
/* Calculate routing info length based on arp table entry */
if (rt && (sdl = (struct sockaddr_dl *)rt->rt_gateway))
- if (sdl->sdl_rcf != NULL)
- rif_len = TR_RCF_RIFLEN(sdl->sdl_rcf);
+ if (SDL_ISO88025(sdl)->trld_rcf != NULL)
+ rif_len = TR_RCF_RIFLEN(SDL_ISO88025(sdl)->trld_rcf);
/* Generate a generic 802.5 header for the packet */
gen_th.ac = TR_AC;
@@ -264,9 +264,10 @@ iso88025_output(ifp, m, dst, rt0)
if (rif_len) {
gen_th.iso88025_shost[0] |= TR_RII;
if (rif_len > 2) {
- gen_th.rcf = sdl->sdl_rcf;
+ gen_th.rcf = SDL_ISO88025(sdl)->trld_rcf;
(void)memcpy((caddr_t)gen_th.rd,
- (caddr_t)sdl->sdl_route, rif_len - 2);
+ (caddr_t)SDL_ISO88025(sdl)->trld_route,
+ rif_len - 2);
}
}
diff --git a/sys/net/iso88025.h b/sys/net/iso88025.h
index e30193e..aad8d54 100644
--- a/sys/net/iso88025.h
+++ b/sys/net/iso88025.h
@@ -109,6 +109,15 @@ struct iso88025_sockaddr_data {
u_char fc;
};
+struct iso88025_sockaddr_dl_data {
+ u_short trld_rcf;
+ u_short *trld_route[RIF_MAX_LEN];
+};
+
+#define SDL_ISO88025(s) ((struct iso88025_sockaddr_dl_data *) \
+ ((s)->sdl_data + min((s)->sdl_nlen + \
+ (s)->sdl_alen + (s)->sdl_slen, 12)))
+
/*
* Structure of a 48-bit iso 802.5 address.
* ( We could also add the 16 bit addresses as a union)
OpenPOWER on IntegriCloud