|
INET Framework for OMNeT++/OMNEST
|
00001 // 00002 // Copyright (C) 2008 Irene Ruengeler 00003 // 00004 // This program is free software; you can redistribute it and/or 00005 // modify it under the terms of the GNU General Public License 00006 // as published by the Free Software Foundation; either version 2 00007 // of the License, or (at your option) any later version. 00008 // 00009 // This program is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with this program; if not, see <http://www.gnu.org/licenses/>. 00016 // 00017 00018 #ifndef OPPSIM_NETINET_SCTP_H_ 00019 #define OPPSIM_NETINET_SCTP_H_ 00020 00021 //#include "platdep/intxtypes.h" 00022 //cd gesamter #define und struct Block neu: 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 // variable length parameters in INIT chunk: 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 //unsigned char cookie[0]; 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 //unsigned char cookie[0]; 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 // Heartbeat info TLV: 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 // SACK GAP: 00300 struct sack_gap { 00301 unsigned short start; 00302 unsigned short stop; 00303 }; 00304 00305 // SACK DUP TSN: 00306 struct sack_duptsn { 00307 unsigned int tsn; 00308 }; 00309 00310 00311 struct data_vector { 00312 unsigned char data[0]; 00313 }; 00314 00315 #endif