00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef OPPSIM_NETINET_SCTP_H_
00019 #define OPPSIM_NETINET_SCTP_H_
00020
00021
00022
00023
00024 #define UNORDERED_BIT 0x04
00025 #define BEGIN_BIT 0x02
00026 #define END_BIT 0x01
00027 #define T_BIT 0x01
00028 #define C_FLAG 0x08
00029 #define T_FLAG 0x04
00030 #define B_FLAG 0x02
00031 #define M_FLAG 0x01
00032
00033
00034 #define CRC32C(c,d) (c=(c>>8)^crc_c[(c^(d))&0xFF])
00035 static unsigned int crc_c[256] =
00036 {
00037 0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L,
00038 0xC79A971FL, 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL,
00039 0x8AD958CFL, 0x78B2DBCCL, 0x6BE22838L, 0x9989AB3BL,
00040 0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, 0x5E133C24L,
00041 0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL,
00042 0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L,
00043 0x9A879FA0L, 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L,
00044 0x5D1D08BFL, 0xAF768BBCL, 0xBC267848L, 0x4E4DFB4BL,
00045 0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, 0x33ED7D2AL,
00046 0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L,
00047 0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L,
00048 0x6DFE410EL, 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL,
00049 0x30E349B1L, 0xC288CAB2L, 0xD1D83946L, 0x23B3BA45L,
00050 0xF779DEAEL, 0x05125DADL, 0x1642AE59L, 0xE4292D5AL,
00051 0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL,
00052 0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L,
00053 0x417B1DBCL, 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L,
00054 0x86E18AA3L, 0x748A09A0L, 0x67DAFA54L, 0x95B17957L,
00055 0xCBA24573L, 0x39C9C670L, 0x2A993584L, 0xD8F2B687L,
00056 0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L,
00057 0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L,
00058 0x96BF4DCCL, 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L,
00059 0xDBFC821CL, 0x2997011FL, 0x3AC7F2EBL, 0xC8AC71E8L,
00060 0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, 0x0F36E6F7L,
00061 0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L,
00062 0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L,
00063 0xEB1FCBADL, 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L,
00064 0x2C855CB2L, 0xDEEEDFB1L, 0xCDBE2C45L, 0x3FD5AF46L,
00065 0x7198540DL, 0x83F3D70EL, 0x90A324FAL, 0x62C8A7F9L,
00066 0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L,
00067 0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L,
00068 0x3CDB9BDDL, 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L,
00069 0x82F63B78L, 0x709DB87BL, 0x63CD4B8FL, 0x91A6C88CL,
00070 0x456CAC67L, 0xB7072F64L, 0xA457DC90L, 0x563C5F93L,
00071 0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L,
00072 0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL,
00073 0x92A8FC17L, 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L,
00074 0x55326B08L, 0xA759E80BL, 0xB4091BFFL, 0x466298FCL,
00075 0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, 0x0B21572CL,
00076 0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L,
00077 0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L,
00078 0x65D122B9L, 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL,
00079 0x2892ED69L, 0xDAF96E6AL, 0xC9A99D9EL, 0x3BC21E9DL,
00080 0xEF087A76L, 0x1D63F975L, 0x0E330A81L, 0xFC588982L,
00081 0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL,
00082 0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L,
00083 0x38CC2A06L, 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L,
00084 0xFF56BD19L, 0x0D3D3E1AL, 0x1E6DCDEEL, 0xEC064EEDL,
00085 0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, 0xD0DDD530L,
00086 0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL,
00087 0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL,
00088 0x8ECEE914L, 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L,
00089 0xD3D3E1ABL, 0x21B862A8L, 0x32E8915CL, 0xC083125FL,
00090 0x144976B4L, 0xE622F5B7L, 0xF5720643L, 0x07198540L,
00091 0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L,
00092 0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL,
00093 0xE330A81AL, 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL,
00094 0x24AA3F05L, 0xD6C1BC06L, 0xC5914FF2L, 0x37FACCF1L,
00095 0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, 0x7AB90321L,
00096 0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL,
00097 0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L,
00098 0x34F4F86AL, 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL,
00099 0x79B737BAL, 0x8BDCB4B9L, 0x988C474DL, 0x6AE7C44EL,
00100 0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, 0xAD7D5351L,
00101 };
00102
00103
00104 struct common_header {
00105 unsigned short source_port;
00106 unsigned short destination_port;
00107 unsigned int verification_tag;
00108 unsigned int checksum;
00109 };
00110
00111 struct chunk {
00112 unsigned char type;
00113 unsigned char flags;
00114 unsigned short length;
00115 };
00116
00117 struct data_chunk {
00118 unsigned char type;
00119 unsigned char flags;
00120 unsigned short length;
00121 unsigned int tsn;
00122 unsigned short sid;
00123 unsigned short ssn;
00124 unsigned int ppi;
00125 unsigned char user_data[0];
00126 };
00127
00128 struct init_chunk {
00129 unsigned char type;
00130 unsigned char flags;
00131 unsigned short length;
00132 unsigned int initiate_tag;
00133 unsigned int a_rwnd;
00134 unsigned short mos;
00135 unsigned short mis;
00136 unsigned int initial_tsn;
00137 unsigned char parameter[0];
00138 };
00139
00140 struct init_ack_chunk {
00141 unsigned char type;
00142 unsigned char flags;
00143 unsigned short length;
00144 unsigned int initiate_tag;
00145 unsigned int a_rwnd;
00146 unsigned short mos;
00147 unsigned short mis;
00148 unsigned int initial_tsn;
00149 unsigned char parameter[0];
00150 };
00151
00152 struct sack_chunk {
00153 unsigned char type;
00154 unsigned char flags;
00155 unsigned short length;
00156 unsigned int cum_tsn_ack;
00157 unsigned int a_rwnd;
00158 unsigned short nr_of_gaps;
00159 unsigned short nr_of_dups;
00160 unsigned char tsns[0];
00161 };
00162
00163 struct heartbeat_chunk {
00164 unsigned char type;
00165 unsigned char flags;
00166 unsigned short length;
00167 unsigned char heartbeat_info[0];
00168 };
00169
00170 struct heartbeat_ack_chunk {
00171 unsigned char type;
00172 unsigned char flags;
00173 unsigned short length;
00174 unsigned char heartbeat_info[0];
00175 };
00176
00177 struct abort_chunk {
00178 unsigned char type;
00179 unsigned char flags;
00180 unsigned short length;
00181 unsigned char error_causes[0];
00182 };
00183
00184 struct shutdown_chunk {
00185 unsigned char type;
00186 unsigned char flags;
00187 unsigned short length;
00188 unsigned int cumulative_tsn_ack;
00189 };
00190
00191 struct shutdown_ack_chunk {
00192 unsigned char type;
00193 unsigned char flags;
00194 unsigned short length;
00195 };
00196
00197 struct shutdown_complete_chunk {
00198 unsigned char type;
00199 unsigned char flags;
00200 unsigned short length;
00201 };
00202
00203 struct cookie_echo_chunk {
00204 unsigned char type;
00205 unsigned char flags;
00206 unsigned short length;
00207 unsigned char state_cookie[0];
00208 };
00209
00210 struct cookie_ack_chunk {
00211 unsigned char type;
00212 unsigned char flags;
00213 unsigned short length;
00214 };
00215
00216 struct error_chunk {
00217 unsigned char type;
00218 unsigned char flags;
00219 unsigned short length;
00220 unsigned char error_causes[0];
00221 };
00222
00223
00224
00225 #define INIT_PARAM_IPV4 5
00226 #define INIT_PARAM_IPV6 6
00227 #define INIT_PARAM_COOKIE 7
00228 #define INIT_SUPPORTED_ADDRESS 12
00229
00230 struct init_ipv4_address_parameter {
00231 unsigned short type;
00232 unsigned short length;
00233 unsigned int address;
00234 };
00235
00236 struct init_ipv6_address_parameter {
00237 unsigned short type;
00238 unsigned short length;
00239 unsigned int address[4];
00240 };
00241
00242 struct init_cookie_parameter {
00243 unsigned short type;
00244 unsigned short length;
00245 unsigned int creationTime;
00246 unsigned int localTag;
00247 unsigned int peerTag;
00248 unsigned char localTieTag[32];
00249 unsigned char peerTieTag[32];
00250
00251 };
00252
00253 struct cookie_parameter {
00254 unsigned int creationTime;
00255 unsigned int localTag;
00256 unsigned int peerTag;
00257 unsigned char localTieTag[32];
00258 unsigned char peerTieTag[32];
00259
00260 };
00261
00262 struct tlv {
00263 unsigned short type;
00264 unsigned short length;
00265 unsigned char value[0];
00266 };
00267
00268
00269 struct supported_address_types_parameter {
00270 unsigned short type;
00271 unsigned short length;
00272 unsigned short address_type;
00273 };
00274
00275
00276
00277 struct heartbeat_info {
00278 unsigned short type;
00279 unsigned short length;
00280 union {
00281 unsigned char info[];
00282 struct {
00283 unsigned int addr;
00284 unsigned int time;
00285 } addr_and_time;
00286 } heartbeat_info_union;
00287 };
00288
00289 #define HBI_INFO(hbi) ((hbi)->heartbeat_info_union.info)
00290 #define HBI_ADDR(hbi) ((hbi)->heartbeat_info_union.addr_and_time.addr)
00291 #define HBI_TIME(hbi) ((hbi)->heartbeat_info_union.addr_and_time.time)
00292
00293 struct error_cause {
00294 unsigned short cause_code;
00295 unsigned short length;
00296 unsigned char info[0];
00297 };
00298
00299
00300 struct sack_gap {
00301 unsigned short start;
00302 unsigned short stop;
00303 };
00304
00305
00306 struct sack_duptsn {
00307 unsigned int tsn;
00308 };
00309
00310
00311 struct data_vector {
00312 unsigned char data[0];
00313 };
00314
00315 #endif