netmap: tools: fix several compiler warnings
MFC after: 1 week
This commit is contained in:
parent
46f49b7c0c
commit
61b4d85fe5
@ -21,6 +21,8 @@ LDFLAGS += -lm # used by nmreplay
|
||||
.include <bsd.prog.mk>
|
||||
.include <bsd.lib.mk>
|
||||
|
||||
CFLAGS += -Wno-cast-align
|
||||
|
||||
all: $(PROGS)
|
||||
|
||||
pkt-gen: pkt-gen.o
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include <net/netmap_user.h>
|
||||
#include <sys/poll.h>
|
||||
|
||||
int verbose = 0;
|
||||
static int verbose = 0;
|
||||
|
||||
static int do_abort = 0;
|
||||
static int zerocopy = 1; /* enable zerocopy if possible */
|
||||
@ -31,7 +31,7 @@ sigint_h(int sig)
|
||||
/*
|
||||
* how many packets on this set of queues ?
|
||||
*/
|
||||
int
|
||||
static int
|
||||
pkt_queued(struct nm_desc *d, int tx)
|
||||
{
|
||||
u_int i, tot = 0;
|
||||
|
@ -18,12 +18,12 @@ struct my_ctrs {
|
||||
* Caller has to make sure that the buffer is large enough.
|
||||
*/
|
||||
static const char *
|
||||
norm2(char *buf, double val, char *fmt, int normalize)
|
||||
norm2(char *buf, double val, const char *fmt, int normalize)
|
||||
{
|
||||
char *units[] = { "", "K", "M", "G", "T" };
|
||||
const char *units[] = { "", "K", "M", "G", "T" };
|
||||
u_int i;
|
||||
if (normalize)
|
||||
for (i = 0; val >=1000 && i < sizeof(units)/sizeof(char *) - 1; i++)
|
||||
for (i = 0; val >=1000 && i < sizeof(units)/sizeof(const char *) - 1; i++)
|
||||
val /= 1000;
|
||||
else
|
||||
i=0;
|
||||
|
@ -89,7 +89,7 @@ struct compact_ipv6_hdr {
|
||||
#define BUF_REVOKE 100
|
||||
#define STAT_MSG_MAXSIZE 1024
|
||||
|
||||
struct {
|
||||
static struct {
|
||||
char ifname[MAX_IFNAMELEN];
|
||||
char base_name[MAX_IFNAMELEN];
|
||||
int netmap_fd;
|
||||
@ -115,7 +115,7 @@ struct overflow_queue {
|
||||
uint32_t size;
|
||||
};
|
||||
|
||||
struct overflow_queue *freeq;
|
||||
static struct overflow_queue *freeq;
|
||||
|
||||
static inline int
|
||||
oq_full(struct overflow_queue *q)
|
||||
@ -160,12 +160,12 @@ oq_deq(struct overflow_queue *q)
|
||||
|
||||
static volatile int do_abort = 0;
|
||||
|
||||
uint64_t dropped = 0;
|
||||
uint64_t forwarded = 0;
|
||||
uint64_t received_bytes = 0;
|
||||
uint64_t received_pkts = 0;
|
||||
uint64_t non_ip = 0;
|
||||
uint32_t freeq_n = 0;
|
||||
static uint64_t dropped = 0;
|
||||
static uint64_t forwarded = 0;
|
||||
static uint64_t received_bytes = 0;
|
||||
static uint64_t received_pkts = 0;
|
||||
static uint64_t non_ip = 0;
|
||||
static uint32_t freeq_n = 0;
|
||||
|
||||
struct port_des {
|
||||
char interface[MAX_PORTNAMELEN];
|
||||
@ -178,7 +178,7 @@ struct port_des {
|
||||
struct group_des *group;
|
||||
};
|
||||
|
||||
struct port_des *ports;
|
||||
static struct port_des *ports;
|
||||
|
||||
/* each group of pipes receives all the packets */
|
||||
struct group_des {
|
||||
@ -190,7 +190,7 @@ struct group_des {
|
||||
int custom_port;
|
||||
};
|
||||
|
||||
struct group_des *groups;
|
||||
static struct group_des *groups;
|
||||
|
||||
/* statistcs */
|
||||
struct counters {
|
||||
@ -205,7 +205,7 @@ struct counters {
|
||||
#define COUNTERS_FULL 1
|
||||
};
|
||||
|
||||
struct counters counters_buf;
|
||||
static struct counters counters_buf;
|
||||
|
||||
static void *
|
||||
print_stats(void *arg)
|
||||
@ -387,7 +387,7 @@ static void sigint_h(int sig)
|
||||
signal(SIGINT, SIG_DFL);
|
||||
}
|
||||
|
||||
void usage()
|
||||
static void usage()
|
||||
{
|
||||
printf("usage: lb [options]\n");
|
||||
printf("where options are:\n");
|
||||
@ -404,9 +404,9 @@ void usage()
|
||||
}
|
||||
|
||||
static int
|
||||
parse_pipes(char *spec)
|
||||
parse_pipes(const char *spec)
|
||||
{
|
||||
char *end = index(spec, ':');
|
||||
const char *end = index(spec, ':');
|
||||
static int max_groups = 0;
|
||||
struct group_des *g;
|
||||
|
||||
@ -458,7 +458,8 @@ parse_pipes(char *spec)
|
||||
}
|
||||
|
||||
/* complete the initialization of the groups data structure */
|
||||
void init_groups(void)
|
||||
static void
|
||||
init_groups(void)
|
||||
{
|
||||
int i, j, t = 0;
|
||||
struct group_des *g = NULL;
|
||||
@ -484,7 +485,8 @@ void init_groups(void)
|
||||
* chain headed by g.
|
||||
* Return a free buffer.
|
||||
*/
|
||||
uint32_t forward_packet(struct group_des *g, struct netmap_slot *rs)
|
||||
static uint32_t
|
||||
forward_packet(struct group_des *g, struct netmap_slot *rs)
|
||||
{
|
||||
uint32_t hash = rs->ptr;
|
||||
uint32_t output_port = hash % g->nports;
|
||||
@ -886,7 +888,6 @@ int main(int argc, char **argv)
|
||||
*/
|
||||
for (i = glob_arg.num_groups - 1U; i > 0; i--) {
|
||||
struct group_des *g = &groups[i - 1];
|
||||
int j;
|
||||
|
||||
for (j = 0; j < g->nports; j++) {
|
||||
struct port_des *p = &g->ports[j];
|
||||
@ -917,7 +918,7 @@ int main(int argc, char **argv)
|
||||
for (i = 0; i < npipes; i++) {
|
||||
struct port_des *p = &ports[i];
|
||||
struct overflow_queue *q = p->oq;
|
||||
uint32_t j, lim;
|
||||
uint32_t k, lim;
|
||||
struct netmap_ring *ring;
|
||||
struct netmap_slot *slot;
|
||||
|
||||
@ -929,7 +930,7 @@ int main(int argc, char **argv)
|
||||
continue;
|
||||
if (q->n < lim)
|
||||
lim = q->n;
|
||||
for (j = 0; j < lim; j++) {
|
||||
for (k = 0; k < lim; k++) {
|
||||
struct netmap_slot s = oq_deq(q), tmp;
|
||||
tmp.ptr = 0;
|
||||
slot = &ring->slot[ring->head];
|
||||
|
@ -431,7 +431,7 @@ readpcap(const char *fn)
|
||||
|
||||
enum my_pcap_mode { PM_NONE, PM_FAST, PM_FIXED, PM_REAL };
|
||||
|
||||
int verbose = 0;
|
||||
static int verbose = 0;
|
||||
|
||||
static int do_abort = 0;
|
||||
|
||||
@ -988,7 +988,8 @@ usage(void)
|
||||
static char **
|
||||
split_arg(const char *src, int *_ac)
|
||||
{
|
||||
char *my = NULL, **av = NULL, *seps = " \t\r\n,";
|
||||
char *my = NULL, **av = NULL;
|
||||
const char *seps = " \t\r\n,";
|
||||
int l, i, ac; /* number of entries */
|
||||
|
||||
if (!src)
|
||||
@ -1127,15 +1128,15 @@ main(int argc, char **argv)
|
||||
|
||||
/* set default values */
|
||||
for (i = 0; i < N_OPTS; i++) {
|
||||
struct _qs *q = &bp[i].q;
|
||||
struct _qs *qs = &bp[i].q;
|
||||
|
||||
q->burst = 128;
|
||||
q->c_delay.optarg = "0";
|
||||
q->c_delay.run = null_run_fn;
|
||||
q->c_loss.optarg = "0";
|
||||
q->c_loss.run = null_run_fn;
|
||||
q->c_bw.optarg = "0";
|
||||
q->c_bw.run = null_run_fn;
|
||||
qs->burst = 128;
|
||||
qs->c_delay.optarg = "0";
|
||||
qs->c_delay.run = null_run_fn;
|
||||
qs->c_loss.optarg = "0";
|
||||
qs->c_loss.run = null_run_fn;
|
||||
qs->c_bw.optarg = "0";
|
||||
qs->c_bw.run = null_run_fn;
|
||||
}
|
||||
|
||||
// Options:
|
||||
@ -1250,10 +1251,10 @@ main(int argc, char **argv)
|
||||
|
||||
/* apply commands */
|
||||
for (i = 0; i < N_OPTS; i++) { /* once per queue */
|
||||
struct _qs *q = &bp[i].q;
|
||||
err += cmd_apply(delay_cfg, d[i], q, &q->c_delay);
|
||||
err += cmd_apply(bw_cfg, b[i], q, &q->c_bw);
|
||||
err += cmd_apply(loss_cfg, l[i], q, &q->c_loss);
|
||||
struct _qs *qs = &bp[i].q;
|
||||
err += cmd_apply(delay_cfg, d[i], qs, &qs->c_delay);
|
||||
err += cmd_apply(bw_cfg, b[i], qs, &qs->c_bw);
|
||||
err += cmd_apply(loss_cfg, l[i], qs, &qs->c_loss);
|
||||
}
|
||||
|
||||
pthread_create(&bp[0].cons_tid, NULL, nmreplay_main, (void*)&bp[0]);
|
||||
@ -1287,7 +1288,7 @@ main(int argc, char **argv)
|
||||
* the final entry has s = NULL.
|
||||
*/
|
||||
struct _sm { /* string and multiplier */
|
||||
char *s;
|
||||
const char *s;
|
||||
double m;
|
||||
};
|
||||
|
||||
|
@ -42,7 +42,6 @@
|
||||
#define NETMAP_WITH_LIBS
|
||||
#include <net/netmap_user.h>
|
||||
|
||||
|
||||
#include <ctype.h> // isprint()
|
||||
#include <unistd.h> // sysconf()
|
||||
#include <sys/poll.h>
|
||||
@ -179,14 +178,14 @@ static inline void CPU_SET(uint32_t i, cpuset_t *p)
|
||||
do {struct timespec t0 = {0,0}; *(b) = t0; } while (0)
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
const char *default_payload="netmap pkt-gen DIRECT payload\n"
|
||||
static const char *default_payload = "netmap pkt-gen DIRECT payload\n"
|
||||
"http://info.iet.unipi.it/~luigi/netmap/ ";
|
||||
|
||||
const char *indirect_payload="netmap pkt-gen indirect payload\n"
|
||||
static const char *indirect_payload = "netmap pkt-gen indirect payload\n"
|
||||
"http://info.iet.unipi.it/~luigi/netmap/ ";
|
||||
|
||||
int verbose = 0;
|
||||
int normalize = 1;
|
||||
static int verbose = 0;
|
||||
static int normalize = 1;
|
||||
|
||||
#define VIRT_HDR_1 10 /* length of a base vnet-hdr */
|
||||
#define VIRT_HDR_2 12 /* length of the extenede vnet-hdr */
|
||||
@ -218,7 +217,7 @@ struct pkt {
|
||||
((af) == AF_INET ? (p)->ipv4.f: (p)->ipv6.f)
|
||||
|
||||
struct ip_range {
|
||||
char *name;
|
||||
const char *name;
|
||||
union {
|
||||
struct {
|
||||
uint32_t start, end; /* same as struct in_addr */
|
||||
@ -232,7 +231,7 @@ struct ip_range {
|
||||
};
|
||||
|
||||
struct mac_range {
|
||||
char *name;
|
||||
const char *name;
|
||||
struct ether_addr start, end;
|
||||
};
|
||||
|
||||
@ -295,7 +294,7 @@ struct glob_arg {
|
||||
int td_type;
|
||||
void *mmap_addr;
|
||||
char ifname[MAX_IFNAMELEN];
|
||||
char *nmr_config;
|
||||
const char *nmr_config;
|
||||
int dummy_send;
|
||||
int virt_header; /* send also the virt_header */
|
||||
char *packet_file; /* -P option */
|
||||
@ -620,7 +619,7 @@ system_ncpus(void)
|
||||
* If there is no 4th number, then the 3rd is assigned to both #tx-rings
|
||||
* and #rx-rings.
|
||||
*/
|
||||
int
|
||||
static int
|
||||
parse_nmr_config(const char* conf, struct nmreq *nmr)
|
||||
{
|
||||
char *w, *tok;
|
||||
@ -727,7 +726,7 @@ checksum(const void *data, uint16_t len, uint32_t sum)
|
||||
|
||||
/* Checksum all the pairs of bytes first... */
|
||||
for (i = 0; i < (len & ~1U); i += 2) {
|
||||
sum += (u_int16_t)ntohs(*((u_int16_t *)(addr + i)));
|
||||
sum += (uint16_t)ntohs(*((const uint16_t *)(addr + i)));
|
||||
if (sum > 0xFFFF)
|
||||
sum -= 0xFFFF;
|
||||
}
|
||||
@ -1241,7 +1240,7 @@ send_packets(struct netmap_ring *ring, struct pkt *pkt, void *frame,
|
||||
/*
|
||||
* Index of the highest bit set
|
||||
*/
|
||||
uint32_t
|
||||
static uint32_t
|
||||
msb64(uint64_t x)
|
||||
{
|
||||
uint64_t m = 1ULL << 63;
|
||||
@ -2695,7 +2694,7 @@ main_thread(struct glob_arg *g)
|
||||
|
||||
struct td_desc {
|
||||
int ty;
|
||||
char *key;
|
||||
const char *key;
|
||||
void *f;
|
||||
int default_burst;
|
||||
};
|
||||
@ -2715,7 +2714,7 @@ tap_alloc(char *dev)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
int fd, err;
|
||||
char *clonedev = TAP_CLONEDEV;
|
||||
const char *clonedev = TAP_CLONEDEV;
|
||||
|
||||
(void)err;
|
||||
(void)dev;
|
||||
|
@ -145,7 +145,7 @@ static uint32_t decode_gre_hash(const uint8_t *, uint8_t, uint8_t);
|
||||
** Parser + hash function for the IPv4 packet
|
||||
**/
|
||||
static uint32_t
|
||||
decode_ip_n_hash(struct ip *iph, uint8_t hash_split, uint8_t seed)
|
||||
decode_ip_n_hash(const struct ip *iph, uint8_t hash_split, uint8_t seed)
|
||||
{
|
||||
uint32_t rc = 0;
|
||||
|
||||
@ -155,19 +155,19 @@ decode_ip_n_hash(struct ip *iph, uint8_t hash_split, uint8_t seed)
|
||||
ntohs(0xFFFD) + seed,
|
||||
ntohs(0xFFFE) + seed);
|
||||
} else {
|
||||
struct tcphdr *tcph = NULL;
|
||||
struct udphdr *udph = NULL;
|
||||
const struct tcphdr *tcph = NULL;
|
||||
const struct udphdr *udph = NULL;
|
||||
|
||||
switch (iph->ip_p) {
|
||||
case IPPROTO_TCP:
|
||||
tcph = (struct tcphdr *)((uint8_t *)iph + (iph->ip_hl<<2));
|
||||
tcph = (const struct tcphdr *)((const uint8_t *)iph + (iph->ip_hl<<2));
|
||||
rc = sym_hash_fn(ntohl(iph->ip_src.s_addr),
|
||||
ntohl(iph->ip_dst.s_addr),
|
||||
ntohs(tcph->th_sport) + seed,
|
||||
ntohs(tcph->th_dport) + seed);
|
||||
break;
|
||||
case IPPROTO_UDP:
|
||||
udph = (struct udphdr *)((uint8_t *)iph + (iph->ip_hl<<2));
|
||||
udph = (const struct udphdr *)((const uint8_t *)iph + (iph->ip_hl<<2));
|
||||
rc = sym_hash_fn(ntohl(iph->ip_src.s_addr),
|
||||
ntohl(iph->ip_dst.s_addr),
|
||||
ntohs(udph->uh_sport) + seed,
|
||||
@ -175,11 +175,11 @@ decode_ip_n_hash(struct ip *iph, uint8_t hash_split, uint8_t seed)
|
||||
break;
|
||||
case IPPROTO_IPIP:
|
||||
/* tunneling */
|
||||
rc = decode_ip_n_hash((struct ip *)((uint8_t *)iph + (iph->ip_hl<<2)),
|
||||
rc = decode_ip_n_hash((const struct ip *)((const uint8_t *)iph + (iph->ip_hl<<2)),
|
||||
hash_split, seed);
|
||||
break;
|
||||
case IPPROTO_GRE:
|
||||
rc = decode_gre_hash((uint8_t *)iph + (iph->ip_hl<<2),
|
||||
rc = decode_gre_hash((const uint8_t *)iph + (iph->ip_hl<<2),
|
||||
hash_split, seed);
|
||||
break;
|
||||
case IPPROTO_ICMP:
|
||||
@ -205,7 +205,7 @@ decode_ip_n_hash(struct ip *iph, uint8_t hash_split, uint8_t seed)
|
||||
** Parser + hash function for the IPv6 packet
|
||||
**/
|
||||
static uint32_t
|
||||
decode_ipv6_n_hash(struct ip6_hdr *ipv6h, uint8_t hash_split, uint8_t seed)
|
||||
decode_ipv6_n_hash(const struct ip6_hdr *ipv6h, uint8_t hash_split, uint8_t seed)
|
||||
{
|
||||
uint32_t saddr, daddr;
|
||||
uint32_t rc = 0;
|
||||
@ -226,19 +226,19 @@ decode_ipv6_n_hash(struct ip6_hdr *ipv6h, uint8_t hash_split, uint8_t seed)
|
||||
ntohs(0xFFFD) + seed,
|
||||
ntohs(0xFFFE) + seed);
|
||||
} else {
|
||||
struct tcphdr *tcph = NULL;
|
||||
struct udphdr *udph = NULL;
|
||||
const struct tcphdr *tcph = NULL;
|
||||
const struct udphdr *udph = NULL;
|
||||
|
||||
switch(ntohs(ipv6h->ip6_ctlun.ip6_un1.ip6_un1_nxt)) {
|
||||
case IPPROTO_TCP:
|
||||
tcph = (struct tcphdr *)(ipv6h + 1);
|
||||
tcph = (const struct tcphdr *)(ipv6h + 1);
|
||||
rc = sym_hash_fn(ntohl(saddr),
|
||||
ntohl(daddr),
|
||||
ntohs(tcph->th_sport) + seed,
|
||||
ntohs(tcph->th_dport) + seed);
|
||||
break;
|
||||
case IPPROTO_UDP:
|
||||
udph = (struct udphdr *)(ipv6h + 1);
|
||||
udph = (const struct udphdr *)(ipv6h + 1);
|
||||
rc = sym_hash_fn(ntohl(saddr),
|
||||
ntohl(daddr),
|
||||
ntohs(udph->uh_sport) + seed,
|
||||
@ -246,16 +246,16 @@ decode_ipv6_n_hash(struct ip6_hdr *ipv6h, uint8_t hash_split, uint8_t seed)
|
||||
break;
|
||||
case IPPROTO_IPIP:
|
||||
/* tunneling */
|
||||
rc = decode_ip_n_hash((struct ip *)(ipv6h + 1),
|
||||
rc = decode_ip_n_hash((const struct ip *)(ipv6h + 1),
|
||||
hash_split, seed);
|
||||
break;
|
||||
case IPPROTO_IPV6:
|
||||
/* tunneling */
|
||||
rc = decode_ipv6_n_hash((struct ip6_hdr *)(ipv6h + 1),
|
||||
rc = decode_ipv6_n_hash((const struct ip6_hdr *)(ipv6h + 1),
|
||||
hash_split, seed);
|
||||
break;
|
||||
case IPPROTO_GRE:
|
||||
rc = decode_gre_hash((uint8_t *)(ipv6h + 1), hash_split, seed);
|
||||
rc = decode_gre_hash((const uint8_t *)(ipv6h + 1), hash_split, seed);
|
||||
break;
|
||||
case IPPROTO_ICMP:
|
||||
case IPPROTO_ESP:
|
||||
@ -280,7 +280,7 @@ decode_ipv6_n_hash(struct ip6_hdr *ipv6h, uint8_t hash_split, uint8_t seed)
|
||||
* * (See decode_vlan_n_hash & pkt_hdr_hash functions).
|
||||
* */
|
||||
static uint32_t
|
||||
decode_others_n_hash(struct ether_header *ethh, uint8_t seed)
|
||||
decode_others_n_hash(const struct ether_header *ethh, uint8_t seed)
|
||||
{
|
||||
uint32_t saddr, daddr, rc;
|
||||
|
||||
@ -305,18 +305,18 @@ decode_others_n_hash(struct ether_header *ethh, uint8_t seed)
|
||||
** Parser + hash function for VLAN packet
|
||||
**/
|
||||
static inline uint32_t
|
||||
decode_vlan_n_hash(struct ether_header *ethh, uint8_t hash_split, uint8_t seed)
|
||||
decode_vlan_n_hash(const struct ether_header *ethh, uint8_t hash_split, uint8_t seed)
|
||||
{
|
||||
uint32_t rc = 0;
|
||||
struct vlanhdr *vhdr = (struct vlanhdr *)(ethh + 1);
|
||||
const struct vlanhdr *vhdr = (const struct vlanhdr *)(ethh + 1);
|
||||
|
||||
switch (ntohs(vhdr->proto)) {
|
||||
case ETHERTYPE_IP:
|
||||
rc = decode_ip_n_hash((struct ip *)(vhdr + 1),
|
||||
rc = decode_ip_n_hash((const struct ip *)(vhdr + 1),
|
||||
hash_split, seed);
|
||||
break;
|
||||
case ETHERTYPE_IPV6:
|
||||
rc = decode_ipv6_n_hash((struct ip6_hdr *)(vhdr + 1),
|
||||
rc = decode_ipv6_n_hash((const struct ip6_hdr *)(vhdr + 1),
|
||||
hash_split, seed);
|
||||
break;
|
||||
case ETHERTYPE_ARP:
|
||||
@ -336,15 +336,15 @@ uint32_t
|
||||
pkt_hdr_hash(const unsigned char *buffer, uint8_t hash_split, uint8_t seed)
|
||||
{
|
||||
uint32_t rc = 0;
|
||||
struct ether_header *ethh = (struct ether_header *)buffer;
|
||||
const struct ether_header *ethh = (const struct ether_header *)buffer;
|
||||
|
||||
switch (ntohs(ethh->ether_type)) {
|
||||
case ETHERTYPE_IP:
|
||||
rc = decode_ip_n_hash((struct ip *)(ethh + 1),
|
||||
rc = decode_ip_n_hash((const struct ip *)(ethh + 1),
|
||||
hash_split, seed);
|
||||
break;
|
||||
case ETHERTYPE_IPV6:
|
||||
rc = decode_ipv6_n_hash((struct ip6_hdr *)(ethh + 1),
|
||||
rc = decode_ipv6_n_hash((const struct ip6_hdr *)(ethh + 1),
|
||||
hash_split, seed);
|
||||
break;
|
||||
case ETHERTYPE_VLAN:
|
||||
@ -372,15 +372,15 @@ decode_gre_hash(const uint8_t *grehdr, uint8_t hash_split, uint8_t seed)
|
||||
!!(*grehdr & 2) + /* Routing */
|
||||
!!(*grehdr & 4) + /* Key */
|
||||
!!(*grehdr & 8)); /* Sequence Number */
|
||||
uint16_t proto = ntohs(*(uint16_t *)(void *)(grehdr + 2));
|
||||
uint16_t proto = ntohs(*(const uint16_t *)(const void *)(grehdr + 2));
|
||||
|
||||
switch (proto) {
|
||||
case ETHERTYPE_IP:
|
||||
rc = decode_ip_n_hash((struct ip *)(grehdr + len),
|
||||
rc = decode_ip_n_hash((const struct ip *)(grehdr + len),
|
||||
hash_split, seed);
|
||||
break;
|
||||
case ETHERTYPE_IPV6:
|
||||
rc = decode_ipv6_n_hash((struct ip6_hdr *)(grehdr + len),
|
||||
rc = decode_ipv6_n_hash((const struct ip6_hdr *)(grehdr + len),
|
||||
hash_split, seed);
|
||||
break;
|
||||
case 0x6558: /* Transparent Ethernet Bridging */
|
||||
|
Loading…
Reference in New Issue
Block a user