#include <string.h>
#include "netdissect.h"
+#include "extract.h"
#include "addrtoname.h"
-#include "ether.h"
/*
* Based on Ultrix if_fddi.h
*/
struct fddi_header {
- u_char fddi_fc; /* frame control */
- u_char fddi_dhost[6];
- u_char fddi_shost[6];
+ nd_uint8_t fddi_fc; /* frame control */
+ nd_mac_addr fddi_dhost;
+ nd_mac_addr fddi_shost;
};
/*
static inline void
extract_fddi_addrs(const struct fddi_header *fddip, char *fsrc, char *fdst)
{
- register int i;
+ int i;
if (fddi_bitswap) {
/*
*/
static inline void
fddi_hdr_print(netdissect_options *ndo,
- register const struct fddi_header *fddip, register u_int length,
- register const u_char *fsrc, register const u_char *fdst)
+ const struct fddi_header *fddip, u_int length,
+ const u_char *fsrc, const u_char *fdst)
{
const char *srcname, *dstname;
dstname = etheraddr_string(ndo, fdst);
if (!ndo->ndo_qflag)
- print_fddi_fc(ndo, fddip->fddi_fc);
+ print_fddi_fc(ndo, EXTRACT_U_1(fddip->fddi_fc));
ND_PRINT((ndo, "%s > %s, length %u: ",
srcname, dstname,
length));
fddi_print(netdissect_options *ndo, const u_char *p, u_int length, u_int caplen)
{
const struct fddi_header *fddip = (const struct fddi_header *)p;
- struct ether_header ehdr;
+ uint8_t fc;
+ nd_mac_addr srcmac, dstmac;
struct lladdr_info src, dst;
int llc_hdrlen;
return (caplen);
}
+ fc = EXTRACT_U_1(fddip->fddi_fc);
+
/*
* Get the FDDI addresses into a canonical form
*/
- extract_fddi_addrs(fddip, (char *)ESRC(&ehdr), (char *)EDST(&ehdr));
+ extract_fddi_addrs(fddip, (char *)srcmac, (char *)dstmac);
if (ndo->ndo_eflag)
- fddi_hdr_print(ndo, fddip, length, ESRC(&ehdr), EDST(&ehdr));
+ fddi_hdr_print(ndo, fddip, length, srcmac, dstmac);
- src.addr = ESRC(&ehdr);
+ src.addr = srcmac;
src.addr_string = etheraddr_string;
- dst.addr = EDST(&ehdr);
+ dst.addr = dstmac;
dst.addr_string = etheraddr_string;
/* Skip over FDDI MAC header */
caplen -= FDDI_HDRLEN;
/* Frame Control field determines interpretation of packet */
- if ((fddip->fddi_fc & FDDIFC_CLFF) == FDDIFC_LLC_ASYNC) {
+ if ((fc & FDDIFC_CLFF) == FDDIFC_LLC_ASYNC) {
/* Try to print the LLC-layer header & higher layers */
llc_hdrlen = llc_print(ndo, p, length, caplen, &src, &dst);
if (llc_hdrlen < 0) {
ND_DEFAULTPRINT(p, caplen);
llc_hdrlen = -llc_hdrlen;
}
- } else if ((fddip->fddi_fc & FDDIFC_CLFF) == FDDIFC_SMT) {
+ } else if ((fc & FDDIFC_CLFF) == FDDIFC_SMT) {
fddi_smt_print(ndo, p, caplen);
llc_hdrlen = 0;
} else {
/* Some kinds of FDDI packet we cannot handle intelligently */
if (!ndo->ndo_eflag)
- fddi_hdr_print(ndo, fddip, length + FDDI_HDRLEN, ESRC(&ehdr),
- EDST(&ehdr));
+ fddi_hdr_print(ndo, fddip, length + FDDI_HDRLEN, srcmac,
+ dstmac);
if (!ndo->ndo_suppress_default_print)
ND_DEFAULTPRINT(p, caplen);
llc_hdrlen = 0;
* is the number of bytes actually captured.
*/
u_int
-fddi_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, register const u_char *p)
+fddi_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
{
return (fddi_print(ndo, p, h->len, h->caplen));
}