关于sk_buff的问题

rhzhzh 2003-10-20 04:27:32
我写了小程序:但是对于sk_buff中的操作有问题,unsigned char * p_ch_addr = &(p_skb -> nh.iph -> saddr)就是对的,而unsigned char *
p_ch_port =&(p_skb->h.th->dest)j就是错的,我看了看raodan翻译的深入Linux网络核心堆栈中使用的是
struct tcphdr * thread;
thread = (struct tcphdr *)(p_skb->data + p_skb->nh.iph->ihl *4);
if((thread->dest) == *((unsigned short *)p_ch_dest_port))但是这样还是会有问题错误是dereferencing pointer to incomplete type,
还有我使用sk_buff中的h.icmph->checksum +=1;没有问题但是如果使用的是tcp的头中的check又会出现上面的错误信息,请那位大侠帮帮忙解释解释为什么错?
代码如下
int filter_rcv(struct sk_buff * p_skb, struct device * p_dv,struct packet_type * p_pt)
{
struct tcphdr * thread;
p_ch_access_ip[0]="\xc0\xa8\x00\x07";
p_ch_access_ip[1]="\xc0\xa8\x00\xd3";
p_ch_access_ip[2]="\xc0\xa8\x00\xb0";
if((PACKET_HOST == p_skb -> pkt_type ) && (__constant_htons(ETH_P_IP) ==p_skb->protocol))
{
if((4 == p_skb->nh.iph->version) && (IPPROTO_TCP == p_skb->nh.iph->protocol))
{
// char * p_ch_data=(unsigned char *)&(p_skb->h.th->source);
// printk("%c \n",p_skb->h.th->source);
thread = (struct tcphdr *)(p_skb->data + p_skb->nh.iph->ihl *4);
if((thread->dest) == *((unsigned short *)p_ch_dest_port))
{
if((p_skb->nh.iph->saddr !=*(unsigned int *)p_ch_access_ip[0])&&(p_skb->nh.iph->saddr != *(unsigned int *)p_ch_access_ip[1])&&(p_skb->nh.iph->saddr !=*(unsigned int *)p_ch_access_ip[2]))
{
unsigned char * p_ch_addr = &(p_skb -> nh.iph -> saddr);
printk("saddr is %d.%d.%d.%d in telnet \n",*(p_ch_addr),*(p_ch_addr+1),*(p_ch_addr+2),*(p_ch_addr+3));
p_skb->h.th->check +=1;
}
}
}

}
kfree_skb(p_skb);
return(0);

}
...全文
35 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tear_pearl 2003-11-22
  • 打赏
  • 举报
回复
如果是dereferencing pointer to incomplete type的话
应该是你还有些头文件没包括近来,<linux/ip.h>你include了吗?

lonelyeagle 2003-11-21
  • 打赏
  • 举报
回复
p_ch_dest_port是什么类型的变量啊?你好像并没有声明。
rhzhzh 2003-10-21
  • 打赏
  • 举报
回复
我是按照内核代码中的声明,来写的但是就是编译不通过,特别是这句:if((thread->dest) == *((unsigned short *)p_ch_dest_port))你可以看看深入linux网络核心堆栈来看看
arcsiny 2003-10-20
  • 打赏
  • 举报
回复
sk_buff数据结构应该是比较复杂的了,其实我觉得很多象pointer的东西就按照内核中代码写的方式来用就行了,自己没必要再去改成另一种方式.
你的代码部分"复杂"的很,看不懂了 :-(

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧