|
OpenBSD可加载内核模块编程完全指南(18) }
return(0); }
/* * 我们的外部接口,没有做什么,用到了DISPATCH宏 */
int tcpinfo(lkmtp, cmd, ver) struct lkm_table *lkmtp; int cmd; int ver; { DISPATCH(lkmtp, cmd, ver, tcpmod_handler, tcpmod_handler, lkm_nofunc) }
/* * 定义我们自己的包装的tcp_input函数.假如mbuf里有包头,则打印出网络接口接收到的包 * 的总长度以及包的源地址.然后使原来的tcp_input函数正常运行. */
static void new_input(struct mbuf *m, ...) { va_list ap; int iphlen; struct ifnet *ifnp; struct ip *ip;
va_start(ap, m); iphlen = va_arg(ap, int); va_end(ap); if (m->m_flags & M_PKTHDR) { ifnp = m->m_pkthdr.rcvif; ip = mtod(m, struct ip *); printf("incoming packet: %d bytes ", m->m_pkthdr.len); printf("on %s from %sn", ifnp->if_xname, inet_ntoa(ip->ip_src));
|