// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_SOCKET_DIFF_SERV_CODE_POINT_H_
#define NET_SOCKET_DIFF_SERV_CODE_POINT_H_

#include <cstdint>

#include "base/check_op.h"

namespace net {

// Differentiated Services Code Point.
// See http://tools.ietf.org/html/rfc2474 for details.
enum DiffServCodePoint {
  DSCP_NO_CHANGE = -1,
  DSCP_FIRST = DSCP_NO_CHANGE,
  DSCP_DEFAULT = 0,  // Same as DSCP_CS0
  DSCP_CS0  = 0,   // The default
  DSCP_CS1  = 8,   // Bulk/background traffic
  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,  // Video
  DSCP_AF42 = 36,  // Video
  DSCP_AF43 = 38,  // Video
  DSCP_CS5  = 40,  // Video
  DSCP_EF   = 46,  // Voice
  DSCP_CS6  = 48,  // Voice
  DSCP_CS7  = 56,  // Control messages
  DSCP_LAST = DSCP_CS7
};

// Explicit Congestion Notification
// See RFC3168 and RFC9330 for details.
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;
};

// Converts an 8-bit IP TOS field to its DSCP and ECN parts.
inline DscpAndEcn TosToDscpAndEcn(uint8_t tos) {
  // Bitmasks to find the DSCP and ECN pieces of the TOS byte.
  constexpr uint8_t kEcnMask = 0b11;
  constexpr uint8_t kDscpMask = ~kEcnMask;
  return DscpAndEcn{static_cast<DiffServCodePoint>((tos & kDscpMask) >> 2),
                    static_cast<EcnCodePoint>(tos & kEcnMask)};
}

// Converts DSCP and ECN parts back to an 8-bit IP TOS field. The inverse of
// TosToDscpAndEcn(); the NO_CHANGE sentinels are not valid inputs (callers
// must resolve them to concrete values first).
inline uint8_t DscpAndEcnToTos(DiffServCodePoint dscp, EcnCodePoint ecn) {
  CHECK_NE(dscp, DSCP_NO_CHANGE);
  CHECK_NE(ecn, ECN_NO_CHANGE);
  return static_cast<uint8_t>((static_cast<int>(dscp) << 2) |
                              static_cast<int>(ecn));
}

}  // namespace net

#endif  // NET_SOCKET_DIFF_SERV_CODE_POINT_H_
