libipq bug on 2.6.4 ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hi all,
i'm a computer student, and I've found a strange behaviour when using
ip_queue with iptables v1.2.9 on a 2.6.4 kernel.I've written s very simple code, which only displays a ipq_packet_msg_t
structure. The code is at the end of this mail.
When i use this rule : iptables -A INPUT -j QUEUE and i've got no problem
do display the structure.But when i use this rule : iptables -A OUTPUT -j QUEUE, the strucuture is
not complete. For example :
Id Packet : 204
Ip_filter Mark: 0
Hook : 3
Indev :
Outdev : eth0
HW Protocol : 0000
HW Type : 0
HW Addr Len : 0
HW Address : 00:00:00:00:00:00
Len data : 1331

I hope I didn't forget something, but I think there is a problem here

DAVID Thomas

Here is the code :

#include <linux/netfilter.h>
#include <libipq/libipq.h>
#include <stdio.h>

#define BUFSIZE 2048

static void die(struct ipq_handle *h)
{
  ipq_perror("passer");
  ipq_destroy_handle(h);
  exit(1);
}

int main(int argc, char **argv)
{
  int status;
  unsigned char buf[BUFSIZE];
  struct ipq_handle *h;

  h = ipq_create_handle(0, PF_INET);
  if (!h)
    die(h);

  status = ipq_set_mode(h, IPQ_COPY_PACKET, BUFSIZE);
  if (status < 0)
    die(h);

  do{
    status = ipq_read(h, buf, BUFSIZE, 0);
    if (status < 0)
      die(h);

    switch (ipq_message_type(buf)) {
    case NLMSG_ERROR:
      fprintf(stderr, "Received error message %d\n",
	      ipq_get_msgerr(buf));
      break;

    case IPQM_PACKET: {
      ipq_packet_msg_t *m = ipq_get_packet(buf);

      status = ipq_set_verdict(h, m->packet_id,
			       NF_ACCEPT, 0, NULL);
      printf("Id Packet : %d\n", ntohs(m->packet_id));
      printf("Ip_filter Mark: %x\n", m->mark);
      printf("Hook : %d\n", m->hook);
      printf("Indev : %s\n", m->indev_name);
      printf("Outdev : %s\n", m->outdev_name);
      printf("HW Protocol : %.4x\n", ntohs(m->hw_protocol));
      printf("HW Type : %x\n", m->hw_protocol);
      printf("HW Addr Len : %d\n",ntohs(m->hw_addrlen));
      printf("HW Address : %02X:%02X:%02X:%02X:%02X:%02X\n",
      m->hw_addr[0], m->hw_addr[1],	     m->hw_addr[2], m->hw_addr[3], m->hw_addr[4], m->hw_addr[5]);
      printf("Len data : %d\n", ntohs(m->data_len));
      printf("\n");
      if (status < 0)
	die(h);
      break;
    }

    default:
      fprintf(stderr, "Unknown message type!\n");
      break;
    }
  } while (1);

  ipq_destroy_handle(h);
  return 0;
}



-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux