net: fix psock_fanout on sparc64
The packetsocket fanout test uses a packet ring. Use TPACKET_V2 instead of TPACKET_V1 to work around a known 32/64 bit issue in the older ring that manifests on sparc64. Signed-off-by: Willem de Bruijn <willemb@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
eaaa313926
commit
98e821a2a9
|
@ -182,7 +182,13 @@ static char *sock_fanout_open_ring(int fd)
|
||||||
.tp_frame_nr = RING_NUM_FRAMES,
|
.tp_frame_nr = RING_NUM_FRAMES,
|
||||||
};
|
};
|
||||||
char *ring;
|
char *ring;
|
||||||
|
int val = TPACKET_V2;
|
||||||
|
|
||||||
|
if (setsockopt(fd, SOL_PACKET, PACKET_VERSION, (void *) &val,
|
||||||
|
sizeof(val))) {
|
||||||
|
perror("packetsock ring setsockopt version");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
if (setsockopt(fd, SOL_PACKET, PACKET_RX_RING, (void *) &req,
|
if (setsockopt(fd, SOL_PACKET, PACKET_RX_RING, (void *) &req,
|
||||||
sizeof(req))) {
|
sizeof(req))) {
|
||||||
perror("packetsock ring setsockopt");
|
perror("packetsock ring setsockopt");
|
||||||
|
@ -201,7 +207,7 @@ static char *sock_fanout_open_ring(int fd)
|
||||||
|
|
||||||
static int sock_fanout_read_ring(int fd, void *ring)
|
static int sock_fanout_read_ring(int fd, void *ring)
|
||||||
{
|
{
|
||||||
struct tpacket_hdr *header = ring;
|
struct tpacket2_hdr *header = ring;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
while (header->tp_status & TP_STATUS_USER && count < RING_NUM_FRAMES) {
|
while (header->tp_status & TP_STATUS_USER && count < RING_NUM_FRAMES) {
|
||||||
|
|
Loading…
Reference in New Issue