Just tell me why on earth `libicmp/icmp.h' was ever written in the form it exists today. It differs from <netinet/ip_icmp.h> in more than forty macros alone. Backwards is really the nicest thing I can express about that construct. I have just begun the process of adapting our source files to fit the official header file <netinet/ip_icmp.h>, thus abondoning `libicmp/icmp.h'.
ip_icmp.h isn't a standardised header though. I'm not sure about rewriting ping/etc to use this over icmp.h; (which means; lemme think about it for a few days, and feel free to add arguments for the change in the mean time)