| 1132 | |
| 1133 | |
| 1134 | class ICMP(Packet): |
| 1135 | name = "ICMP" |
| 1136 | fields_desc = [ |
| 1137 | ByteEnumField("type", 8, icmptypes), |
| 1138 | MultiEnumField("code", 0, icmpcodes, |
| 1139 | depends_on=lambda pkt:pkt.type, fmt="B"), |
| 1140 | XShortField("chksum", None), |
| 1141 | ConditionalField( |
| 1142 | XShortField("id", 0), |
| 1143 | lambda pkt: pkt.type in icmp_id_seq_types |
| 1144 | ), |
| 1145 | ConditionalField( |
| 1146 | XShortField("seq", 0), |
| 1147 | lambda pkt: pkt.type in icmp_id_seq_types |
| 1148 | ), |
| 1149 | ConditionalField( |
| 1150 | # Timestamp only (RFC792) |
| 1151 | ICMPTimeStampField("ts_ori", None), |
| 1152 | lambda pkt: pkt.type in [13, 14] |
| 1153 | ), |
| 1154 | ConditionalField( |
| 1155 | # Timestamp only (RFC792) |
| 1156 | ICMPTimeStampField("ts_rx", None), |
| 1157 | lambda pkt: pkt.type in [13, 14] |
| 1158 | ), |
| 1159 | ConditionalField( |
| 1160 | # Timestamp only (RFC792) |
| 1161 | ICMPTimeStampField("ts_tx", None), |
| 1162 | lambda pkt: pkt.type in [13, 14] |
| 1163 | ), |
| 1164 | ConditionalField( |
| 1165 | # Redirect only (RFC792) |
| 1166 | IPField("gw", "0.0.0.0"), |
| 1167 | lambda pkt: pkt.type == 5 |
| 1168 | ), |
| 1169 | ConditionalField( |
| 1170 | # Parameter problem only (RFC792) |
| 1171 | ByteField("ptr", 0), |
| 1172 | lambda pkt: pkt.type == 12 |
| 1173 | ), |
| 1174 | ConditionalField( |
| 1175 | ByteField("reserved", 0), |
| 1176 | lambda pkt: pkt.type in [3, 11] |
| 1177 | ), |
| 1178 | ConditionalField( |
| 1179 | ByteField("length", 0), |
| 1180 | lambda pkt: pkt.type in [3, 11, 12] |
| 1181 | ), |
| 1182 | ConditionalField( |
| 1183 | IPField("addr_mask", "0.0.0.0"), |
| 1184 | lambda pkt: pkt.type in [17, 18] |
| 1185 | ), |
| 1186 | ConditionalField( |
| 1187 | ShortField("nexthopmtu", 0), |
| 1188 | lambda pkt: pkt.type == 3 |
| 1189 | ), |
| 1190 | MultipleTypeField( |
| 1191 | [ |
no test coverage detected