| struct xt_icmp_names { |
| const char *name; |
| uint8_t type; |
| uint8_t code_min, code_max; |
| }; |
| |
| static void xt_print_icmp_types(const struct xt_icmp_names *icmp_codes, |
| unsigned int n_codes) |
| { |
| unsigned int i; |
| |
| for (i = 0; i < n_codes; ++i) { |
| if (i && icmp_codes[i].type == icmp_codes[i-1].type) { |
| if (icmp_codes[i].code_min == icmp_codes[i-1].code_min |
| && (icmp_codes[i].code_max |
| == icmp_codes[i-1].code_max)) |
| printf(" (%s)", icmp_codes[i].name); |
| else |
| printf("\n %s", icmp_codes[i].name); |
| } |
| else |
| printf("\n%s", icmp_codes[i].name); |
| } |
| printf("\n"); |
| } |