免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 注册好难哦
打印 上一主题 下一主题

setsockopt()参数问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-05-19 19:43 |只看该作者
一个叫drcom的内核模块定义了CONN_SO_SET_AUTH_CMD

  1. #ifndef _TCPTRACK_H_
  2. #define _TCPTRACK_H_

  3. #include <linux/if.h>

  4. #define CONN_SO_BASE_CTL        (64+2048+64)

  5. #define CONN_SO_SET_AUTH_CMD    CONN_SO_BASE_CTL
  6. #define CONN_SO_SET_PARAMS      (CONN_SO_BASE_CTL+1)
  7. #define CONN_SO_SET_MAX         CONN_SO_SET_PARAMS

  8. #define CONN_MODE_NONE          0
  9. #define CONN_MODE_AUTH          1

  10. #define CONN_AUTH_DATA_LEN      16

  11. struct e_address
  12. {
  13.         u_int32_t       addr;
  14.         u_int32_t       mask;
  15. };

  16. struct conn_param
  17. {
  18.         char                    devname[IFNAMSIZ];

  19.         int                     e_count;
  20.         struct e_address        es[0];
  21. };

  22. struct conn_auth_cmd
  23. {
  24.         int             cmd;
  25.         pid_t           pid;
  26.         int             autologout;
  27.         unsigned char   auth_data[CONN_AUTH_DATA_LEN];
  28. };

  29. #endif
复制代码

  1. static int conn_set_sockopt(struct sock *sk, int optname, void *optval, unsigned int optlen)
  2. {
  3.         switch (optname) {
  4.         case CONN_SO_SET_PARAMS: /* set addresses of no need to auth */
  5.                 return conn_set_params(sk, optname, optval, optlen);

  6.         case CONN_SO_SET_AUTH_CMD: /* set auth data, and start auth */
  7.                 return conn_set_auth_cmd(sk, optname, optval, optlen);

  8.         default:
  9.                 return -ENOPROTOOPT;
  10.         }

  11.         return -ENOPROTOOPT;
  12. }
复制代码


  1. static int conn_set_auth_cmd(struct sock *sk, int optname, void *optval, unsigned int optlen)
  2. {
  3.         struct conn_auth_cmd cmd;
  4.         int hash_todo = 0;

  5.         if (optlen < sizeof(struct conn_auth_cmd))
  6.                 return -EINVAL;

  7.         if (copy_from_user(&cmd, optval, sizeof(struct conn_auth_cmd)))
  8.                 return -EFAULT;

  9.         printk("<1> cmd=%d\n", cmd.cmd);
  10.         printk("<1> pid=%d\n", cmd.pid);
  11.         printk("<1> autologout=%d\n", cmd.autologout);
  12.         printk("<1> auth_data=\n");
  13.         for (n=0; n< 16;n++)
  14.                 printk("<1> 0x%02x\n",(unsigned char)cmd.auth_data[n]);

  15.         rtnl_lock();

  16.         write_lock_bh(&mode_lock);

  17.         if (track_mode == CONN_MODE_NONE && cmd.cmd == CONN_MODE_AUTH) {
  18.                 track_mode = cmd.cmd;
  19.                 conn_pid = cmd.pid;
  20.                 conn_autologout = cmd.autologout;
  21.                 memcpy(conn_auth_data, cmd.auth_data, CONN_AUTH_DATA_LEN);
  22.                 hash_todo = 1; /* conn_hooks_init() */
  23.         } else if (track_mode == CONN_MODE_AUTH && cmd.cmd == CONN_MODE_NONE) {
  24.                 track_mode = cmd.cmd;
  25.                 conn_pid = 0;
  26.                 conn_autologout = 0;
  27.                 memset(conn_auth_data, 0, CONN_AUTH_DATA_LEN);
  28.                 hash_todo = 2; /* conn_hooks_cleanup */
  29.         } else {
  30.                 DEBUGP("Same Auth Cmd\n");
  31.         }

  32.         write_unlock_bh(&mode_lock);

  33.         if (hash_todo == 1) {
  34.                 init_keepalive_timer();
  35.                 conn_hooks_init();
  36.                 printk(KERN_INFO "Drcom-Kernel: Authentication Started.\n");
  37.         } else if (hash_todo == 2) {
  38.                 del_keepalive_timer();
  39.                 conn_hooks_cleanup();
  40.                 conn_hash_cleanup();
  41.                 printk(KERN_INFO "Drcom-Kernel: Authentication Stopped.\n");
  42.         }

  43.         rtnl_unlock();

  44.         return 0;
  45. }
复制代码

论坛徽章:
0
12 [报告]
发表于 2010-05-19 20:43 |只看该作者
在网上查了一下,好像是一个不太常用的功能可以作为模块加载,然后减小内存的开销。没太理解。
楼上大哥可否详细阐述一下程序加载内核模块的作用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP