1
0
mirror of https://github.com/cmand/yarrp.git synced 2024-05-11 05:55:06 +00:00
Files
cmand-yarrp/icmp.h
2020-06-18 21:36:42 -07:00

77 lines
1.9 KiB
C++

typedef struct mpls_label {
uint32_t label:20;
uint8_t exp:4;
uint8_t ttl;
struct mpls_label *next;
} mpls_label_t;
#define MAX_MPLS_STACK_HEIGHT 4
class ICMP {
public:
ICMP();
virtual void print() {};
virtual void write(FILE **, uint32_t) {};
virtual uint32_t getSrc() { return 0; };
virtual struct in6_addr *getSrc6() { return NULL; };
virtual uint32_t quoteDst() { return 0; };
virtual struct in6_addr quoteDst6() { struct in6_addr a; return a; };
void printterse(char *);
uint8_t quoteTTL() { return ttl; }
uint32_t getRTT() { return rtt; }
uint32_t getTTL() { return ttl; }
uint16_t getSport() { return sport; }
uint16_t getDport() { return dport; }
uint8_t getInstance() { return instance; }
void print(char *, char *, int);
void write(FILE **, uint32_t, char *, char *);
char *getMPLS();
bool is_yarrp;
protected:
uint32_t rtt;
uint8_t ttl;
uint8_t instance;
uint8_t type;
uint8_t code;
uint8_t length;
uint8_t quote_p;
uint16_t sport;
uint16_t dport;
uint16_t ipid;
uint16_t probesize;
uint16_t replysize;
uint8_t replyttl;
uint8_t replytos;
struct timeval tv;
bool coarse;
mpls_label_t *mpls_stack;
};
class ICMP4 : public ICMP {
public:
ICMP4(struct ip *, struct icmp *, uint32_t elapsed, bool _coarse);
uint32_t quoteDst();
uint32_t getSrc() { return ip_src.s_addr; }
void print();
void write(FILE **, uint32_t);
private:
struct ip *quote;
struct in_addr ip_src;
};
class ICMP6 : public ICMP {
public:
ICMP6(struct ip6_hdr *, struct icmp6_hdr *, uint32_t elapsed, bool _coarse);
struct in6_addr *getSrc6() { return &ip_src; }
struct in6_addr quoteDst6();
void print();
void write(FILE **, uint32_t);
private:
struct ip6_hdr *quote;
struct in6_addr ip_src;
struct in6_addr *yarrp_target;
};