/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
 * Copyright (c) 2013-2014 Regents of the University of California.
 *
 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
 *
 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
 * terms of the GNU Lesser General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later version.
 *
 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
 *
 * You should have received copies of the GNU General Public License and GNU Lesser
 * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
 * <http://www.gnu.org/licenses/>.
 *
 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
 */

#ifndef NDN_ENCODING_TLV_NFD_HPP
#define NDN_ENCODING_TLV_NFD_HPP

#include "../common.hpp"
#include "nfd-constants.hpp"

namespace ndn {
namespace tlv {
namespace nfd {

// NFD Management protocol
enum {
  // ControlParameters
  ControlParameters   = 104,
  FaceId              = 105,
  Uri                 = 114,
  LocalControlFeature = 110,
  Origin              = 111,
  Cost                = 106,
  Flags               = 108,
  Strategy            = 107,
  ExpirationPeriod    = 109,

  // ControlResponse
  ControlResponse = 101,
  StatusCode      = 102,
  StatusText      = 103,

  // ForwarderStatus
  NfdVersion           = 128,
  StartTimestamp       = 129,
  CurrentTimestamp     = 130,
  NNameTreeEntries     = 131,
  NFibEntries          = 132,
  NPitEntries          = 133,
  NMeasurementsEntries = 134,
  NCsEntries           = 135,

  // Face Management
  FaceStatus            = 128,
  LocalUri              = 129,
  ChannelStatus         = 130,
  FaceFlags             = 194,
  FaceEventNotification = 192,
  FaceEventKind         = 193,

  // ForwarderStatus and FaceStatus counters
  NInInterests  = 144,
  NInDatas      = 145,
  NOutInterests = 146,
  NOutDatas     = 147,
  NInBytes      = 148,
  NOutBytes     = 149,

  // FIB Management
  FibEntry      = 128,
  NextHopRecord = 129,

  // Strategy Choice Management
  StrategyChoice = 128,

  // RIB Management
  RibEntry = 128,
  Route    = 129

};

enum {
  // Local Control Header
  LocalControlHeader = 80,
  IncomingFaceId     = 81,
  NextHopFaceId      = 82
};

} // namespace nfd
} // namespace tlv
} // namespace ndn

#endif // NDN_ENCODING_TLV_NFD_HPP
