ns-linux-c.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* 
  2.  * TCP-Linux module for NS2 
  3.  *
  4.  * May 2006
  5.  *
  6.  * Author: Xiaoliang (David) Wei  (DavidWei@acm.org)
  7.  *
  8.  * NetLab, the California Institute of Technology 
  9.  * http://netlab.caltech.edu
  10.  *
  11.  * Module: linux/ns-linux-c.h
  12.  *      This is the header file of shortcuts for Linux source codes (in C)
  13.  * We shortcut most of the Linux system calls which are not related to congestion control.
  14.  *
  15.  * See a mini-tutorial about TCP-Linux at: http://netlab.caltech.edu/projects/ns2tcplinux/
  16.  *
  17.  */
  18. #ifndef NS_LINUX_C_H
  19. #define NS_LINUX_C_H
  20. #include <string.h>
  21. #include <stdlib.h>
  22. #include <stdio.h>
  23. #include "ns-linux-util.h"
  24. //For sharing Reno
  25. extern u32 tcp_reno_ssthresh(struct sock *sk);
  26. extern void tcp_reno_cong_avoid(struct sock *sk, u32 ack, u32 rtt, u32 in_flight, int flag);
  27. extern u32 tcp_reno_min_cwnd(const struct sock *sk);
  28. #define tcp_is_cwnd_limited(sk, in_flight)  ((in_flight) >= (sk)->snd_cwnd)
  29. //from kernel.h
  30. #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
  31. #define min(x,y) (((x)<(y))?(x):(y))
  32. #define max(x,y) (((x)>(y))?(x):(y))
  33. #define after(seq1,seq2) ((seq2)<(seq1))
  34. #define HZ 1000
  35. // Shortcuts
  36. #define THIS_MODULE 0
  37. #define EXPORT_SYMBOL_GPL(symbol)
  38. #define __init
  39. #define __exit
  40. typedef int (*registerFunctionPointer)(void);
  41. #ifdef NS_PROTOCOL
  42. // for new source codes that defines NS_PROTOCOL, we support module parameters
  43. // set the file name of last_added file
  44. extern void set_linux_file_name(const char*);
  45. extern void record_linux_param(const char*, const char*, const char*, void*);
  46. extern void record_linux_param_description(const char*, const char*, const char*);
  47. #define module_init(x) 
  48. static void module_register(void) __attribute__((constructor));
  49. static void module_register(void) { 
  50. x(); 
  51. set_linux_file_name(NS_PROTOCOL);
  52. };
  53. #define module_exit(x) 
  54. static void module_unregister_fake(void) __attribute__((constructor));
  55. static void module_unregister_fake(void) {
  56. if (0) x();
  57. };
  58. #define module_param(name, type, mode) 
  59. static void module_param_##name(void) __attribute__((constructor));
  60. static void module_param_##name(void) { record_linux_param(NS_PROTOCOL, #name, #type, &name); };
  61. #define MODULE_PARM_DESC(name, exp) 
  62. static void module_param_desc_##name(void) __attribute__((constructor));
  63. static void module_param_desc_##name(void) { record_linux_param_description(NS_PROTOCOL, #name, exp); };
  64. #else
  65. // for old source codes that do not define NS_PROTOCOL, we do not support module parameters
  66. #define module_init(x) 
  67. static void module_register(void) __attribute__((constructor));
  68. static void module_register(void) { 
  69. x(); 
  70.  };
  71. #define module_param(a,b,c)
  72. #define MODULE_PARM_DESC(a,b)
  73. #endif
  74. #define module_put(x)
  75. #define try_module_get(x) 0
  76. #define MODULE_AUTHOR(x)
  77. #define MODULE_LICENSE(x)
  78. #define MODULE_DESCRIPTION(x)
  79. #define MODULE_VERSION(a)
  80. #define KERN_ERR "<2> "
  81. #define KERN_NOTICE "<1> "
  82. #define KERN_INFO "<0> "
  83. #define printk(fmt, args...) { 
  84. if (strlen(fmt)<4 || fmt[0]!='<' || fmt[2]!='>' || fmt[3]!=' ') 
  85. fprintf(stderr, "<Unspecified>" fmt, args);
  86. else if (fmt[1]>=debug_level+'0')
  87. printf(fmt, args);
  88. }
  89. #define EINVAL 1
  90. #define EEXIST 2
  91. #define ENOENT 3
  92. #define EBUSY 4
  93. #define ENOMEM 5
  94. #define EPERM 6
  95. #define BUG_ON(x) 
  96. #define BUILD_BUG_ON(x)
  97. #define WARN_ON(x)
  98. //please make sure the system can run
  99. #define spin_lock(x)
  100. #define spin_unlock(x)
  101. #define rcu_read_lock()
  102. #define rcu_read_unlock()
  103. #define late_initcall(x)
  104. #define capable(x) 1
  105. #define between(seq1, seq2, seq3) ((seq3) - (seq2) >= (seq1) - (seq2))
  106. #define kstrdup(str, mode) strdup(str)
  107. ////////////For delay based protocols:
  108. struct tcpvegas_info {
  109. __u32 tcpv_enabled;
  110. __u32 tcpv_rttcnt;
  111. __u32 tcpv_rtt;
  112. __u32 tcpv_minrtt;
  113. };
  114. #define INET_DIAG_VEGASINFO 1
  115. struct rtattr {};
  116. #define __RTA_PUT(skb, INFO_FLAG, size) NULL
  117. #define RTA_DATA(rta) NULL
  118. //#define DEFINE_SPINLOCK(x)
  119. //#define LIST_HEAD(name)
  120. #define DEFINE_SPINLOCK(x) int FAKED_LOCK_X
  121. #define LIST_HEAD(name) int FAKED_LIST_HEAD
  122. //The true list head is declared in ns-linux-util.h since it has to be accessible by TCP-Linux's cpp codes.
  123. ////////////For bit operations  From include/linux/bitops.h /////////
  124. /*
  125.  * fls: find last bit set.
  126.  */
  127. extern int fls(int x);
  128. extern int fls64(__u64 x);
  129. ///// For 64 bit division from include/asm-generic/div64.h ////
  130. #define do_div(n,base) ({                                      
  131.         uint32_t __base = (base);                               
  132.         uint32_t __rem;                                         
  133.         __rem = ((uint64_t)(n)) % __base;                       
  134.         (n) = ((uint64_t)(n)) / __base;                         
  135.         __rem;                                                  
  136.  })
  137. #define CONG_NUM 0
  138. #define jiffies tcp_time_stamp
  139. #define pr_debug(args...) {if ((debug_level+'0') <= KERN_NOTICE[1]) printf(args);}
  140. #define __read_mostly 
  141. /* 64bit divisor, dividend and result. dynamic precision */
  142. extern uint64_t div64_64(uint64_t dividend, uint64_t divisor);
  143. #define nla_put(skb, type, len, data)
  144. extern int tcp_register_congestion_control(struct tcp_congestion_ops *ca);
  145. extern void tcp_slow_start(struct tcp_sock *tp);
  146. extern void tcp_unregister_congestion_control(struct tcp_congestion_ops *ca);
  147. #endif