mirror of
https://github.com/cmand/yarrp.git
synced 2024-05-11 05:55:06 +00:00
77 lines
1.9 KiB
C++
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;
|
|
};
|
|
|