#ifndef NET_SOCKET_DIFF_SERV_CODE_POINT_H_
#define NET_SOCKET_DIFF_SERV_CODE_POINT_H_
namespace net {
enum DiffServCodePoint {
DSCP_NO_CHANGE = -1,
DSCP_FIRST = DSCP_NO_CHANGE,
DSCP_DEFAULT = 0,
DSCP_CS0 = 0,
DSCP_CS1 = 8,
DSCP_AF11 = 10,
DSCP_AF12 = 12,
DSCP_AF13 = 14,
DSCP_CS2 = 16,
DSCP_AF21 = 18,
DSCP_AF22 = 20,
DSCP_AF23 = 22,
DSCP_CS3 = 24,
DSCP_AF31 = 26,
DSCP_AF32 = 28,
DSCP_AF33 = 30,
DSCP_CS4 = 32,
DSCP_AF41 = 34,
DSCP_AF42 = 36,
DSCP_AF43 = 38,
DSCP_CS5 = 40,
DSCP_EF = 46,
DSCP_CS6 = 48,
DSCP_CS7 = 56,
DSCP_LAST = DSCP_CS7
};
enum EcnCodePoint {
ECN_NO_CHANGE = -1,
ECN_FIRST = ECN_NO_CHANGE,
ECN_DEFAULT = 0,
ECN_NOT_ECT = 0,
ECN_ECT1 = 1,
ECN_ECT0 = 2,
ECN_CE = 3,
ECN_LAST = ECN_CE,
};
struct DscpAndEcn {
DiffServCodePoint dscp;
EcnCodePoint ecn;
};
static inline DscpAndEcn TosToDscpAndEcn(uint8_t tos) {
constexpr uint8_t kEcnMask = 0b11;
constexpr uint8_t kDscpMask = ~kEcnMask;
return DscpAndEcn{static_cast<DiffServCodePoint>((tos & kDscpMask) >> 2),
static_cast<EcnCodePoint>(tos & kEcnMask)};
}
}
#endif