LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 900|回复: 8

问一个raw socket的问题!

[复制链接]
发表于 2006-7-26 17:14:20 | 显示全部楼层 |阅读模式
问题如下:
我想用raw socket创建一个MPLS层的socket(内核已经打了MPLS补丁)使其发送已经打了一层MPLS标记的数据包,socket函数中的第一个参数写AF_MPLS,对应的第三个参数写ETH_P_MPLS_UC(MPLS单播通信协议),可是却提示raw socket error:Address family not supported by protocol.可是打过补丁的内核中确实是存在AF_MPLS的啊!
请教高手!谢谢!
发表于 2006-7-26 19:06:47 | 显示全部楼层
内核支持了,libc支持么
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-27 09:01:18 | 显示全部楼层
Post by x11
内核支持了,libc支持么

谢谢X11!^_^
那再请问x11,怎样做到让libc支持呢?小妹初学,请多指教!
回复 支持 反对

使用道具 举报

发表于 2006-7-27 09:27:56 | 显示全部楼层
用这个吧:
long int syscall (long int sysno, ...)
syscall的number在sys/syscall.h中可以找到。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-27 09:55:20 | 显示全部楼层
Post by realtang
用这个吧:
long int syscall (long int sysno, ...)
syscall的number在sys/syscall.h中可以找到。
不懂啊!可否讲的详细点呢?谢谢了
回复 支持 反对

使用道具 举报

发表于 2006-7-27 16:13:56 | 显示全部楼层
例如socket对应的系统调用号是__NR_sockercall,返回值0表示成功,-1表示错误,具体错误号保存在errno
回复 支持 反对

使用道具 举报

发表于 2006-7-27 22:02:59 | 显示全部楼层
和LIBC没有关系, 你又不是加一个系统调用。 可能是补丁的问题, 我做过KERNERL的协议开发, 只要编译好KERNEL重启, 一般都是好的, 你看看KERNERL的补丁, 是不是注册了一个新的协议。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-28 09:13:50 | 显示全部楼层
Post by JBug
和LIBC没有关系, 你又不是加一个系统调用。 可能是补丁的问题, 我做过KERNERL的协议开发, 只要编译好KERNEL重启, 一般都是好的, 你看看KERNERL的补丁, 是不是注册了一个新的协议。

内核里是注册了一个新的协议,内核编译也通过了,重启也成功,可程序里创建socket的时候就是不成功。如果用socket(AF_PACKET,SOCK_RAW,htons(ETH_P_ALL)),则是没有包发出去。百思不得其解,望高手不吝赐教!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-31 15:15:35 | 显示全部楼层
没人帮帮我吗?各位,救命啊!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表