77范文网 - 专业文章范例文档资料分享平台

红帽Linux故障定位技术详解与实例(3)

来源:网络收集 时间:2018-12-11 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

6. #include 7. #include 8. #include 9. #include 10. #include 11. #include 12. #include

13.

14. MODULE_AUTHOR(\

15. MODULE_DESCRIPTION(\

e arp_process using jprobe and kretprobe\

16. MODULE_LICENSE(\

17.

18. static int j_arp_process(struct sk_buff *skb)

19. {

20. struct net_device *dev = skb->dev;

21. struct in_device *in_dev;

22. int no_addr, rpf;

23.

24. in_dev = in_dev_get(dev); 25. no_addr = ( in_dev->ifa_list == NULL ); 26. rpf = IN_DEV_RPFILTER(in_dev);

27. in_dev_put(in_dev);

28. printk(\no_addr=%d,rpf=%

d) \\n\>name, no_addr, rpf);

29. jprobe_return(); 30. return(0);

31. }; 32.

33. static int j_fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif, 34. struct net_device *dev, __be32 *spec_dst, u32 *itag, u32 mark)

35. 36. {

37. printk(\dst=0x%x, oif=%d \\n\

38. jprobe_return(); 39. return(0);

40. }; 41.

42. static struct jprobe my_jp1 = { 43. .entry = j_arp_process, 44. .kp.symbol_name = \

45. }; 46.

47. static struct jprobe my_jp2 = {

48. .entry = j_fib_validate_source, 49. .kp.symbol_name = \

50. }; 51.

52. static int entry_handler(struct kretprobe_instance *ri, struct pt_regs *regs)

53. {

54. printk(\>rp->kp.symbol_name);

55. return(0);

56. }; 57.

58. static int return_handler(struct kretprobe_instance *ri, struct pt_regs *regs)

59. { 60. int eax;

61.

62. eax = regs->ax & 0xffff ;

63. printk(\>rp->kp.sy

mbol_name, regs->ax, eax);

64. 65. return(0);

66. }; 67.

68. static int fib_lookup_entry_handler(struct kretprobe_instance *ri, struct pt_regs *regs)

69. {

70. struct fib_result *resp;

71.

72. resp = (struct fib_result *) regs->dx;

73. printk(\>rp->kp.symbol_name);

74. *((struct fib_result **)ri->data) = resp;

75. 76. return(0);

77. }; 78.

79. static int fib_lookup_return_handler(struct kretprobe_instance *ri, struct pt_regs *regs)

80. {

81. struct fib_result *resp;

82. int eax;

83.

84. eax = regs->ax & 0xffff ;

85. resp = *((struct fib_result **) ri->data);

86. printk(\>t

ype: %d\\n\>ax, eax, resp->type);

87.

88. return(0);

89. } 90.

91. static struct kretprobe my_rp1 = {

92. .handler = return_handler, 93. .entry_handler = entry_handler, 94. .kp.symbol_name = \

95. }; 96.

97. static struct kretprobe my_rp2 = {

98. .handler = return_handler, 99. .entry_handler = entry_handler, 100. .kp.symbol_name = \

101. }; 102.

103. static struct kretprobe my_rp3 = { 104. .handler = fib_lookup_return_handler, 105. .entry_handler = fib_lookup_entry_handler,

106. .kp.symbol_name = \, 107. .data_size = sizeof(struct fib_result *)

108. }; 109.

110. static int __init init_myprobe(void)

111. { 112. int ret;

113.

114. printk(\

115. if ( (ret = register_jprobe(&my_jp1)) < 0) {

116. printk(\

117. return(-1);

118. } 119.

120. if ( (ret = register_jprobe(&my_jp2)) < 0) {

121. printk(\

122. return(-1);

123. } 124.

125. if ( (ret = register_kretprobe(&my_rp1)) < 0 ) {

126. printk(\

127. unregister_jprobe(&my_jp1); 128. unregister_jprobe(&my_jp2);

129. return(-1);

130. }

131.

132. if ( (ret = register_kretprobe(&my_rp2)) < 0 ) {

133. printk(\

134. unregister_jprobe(&my_jp1); 135. unregister_jprobe(&my_jp2); 136. unregister_kretprobe(&my_rp1);

137. return(-1);

138. } 139.

140. if ( (ret = register_kretprobe(&my_rp3)) < 0 ) {

141. printk(\

142. unregister_jprobe(&my_jp1); 143. unregister_jprobe(&my_jp2); 144. unregister_kretprobe(&my_rp1); 145. unregister_kretprobe(&my_rp2);

146. return(-1);

147. } 148. 149. return 0;

150. } 151. 152.

153. static void __exit rel_myprobe(void)

154. {

155. unregister_jprobe(&my_jp1); 156. unregister_jprobe(&my_jp2); 157. unregister_kretprobe(&my_rp1); 158. unregister_kretprobe(&my_rp2); 159. unregister_kretprobe(&my_rp3);

160. } 161.

162. module_init(init_myprobe); 163. module_exit(rel_myprobe);

164.

165. Makefile obj-m += arp_probe.o

166. Making #> make -C /usr/src/kernels/2.6.32-71.el6.x86_64/ M=`pwd` modules

Linux故障定位技术详解与实例的内容介绍完了,希望通过本文红帽Linux故障定位技术的学习能对你有所帮助!

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库红帽Linux故障定位技术详解与实例(3)在线全文阅读。

红帽Linux故障定位技术详解与实例(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/360853.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: