--- a/model/netlink/netlink-message-route.cc Mon Apr 18 09:01:30 2011 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,647 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 Liu Jian
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Author: Liu Jian <liujatp@gmail.com>
- * Hajime Tazaki <tazaki@sfc.wide.ad.jp>
- */
-
-#include "netlink-message-route.h"
-#include "netlink-message.h"
-
-namespace ns3 {
-
-/***********************************************************************************
-* \ NetlinkPayload
-***********************************************************************************/
-TypeId
-NetlinkPayload::GetTypeId (void)
-{
- static TypeId tid = TypeId ("ns3::NetlinkPayload")
- .SetParent<ObjectBase> ()
- ;
- return tid;
-}
-
-
-/***********************************************************************************
-* \ GeneralMessage
-***********************************************************************************/
-
-NS_OBJECT_ENSURE_REGISTERED (GeneralMessage);
-NS_OBJECT_ENSURE_REGISTERED (InterfaceInfoMessage);
-NS_OBJECT_ENSURE_REGISTERED (InterfaceAddressMessage);
-NS_OBJECT_ENSURE_REGISTERED (RouteMessage);
-
-GeneralMessage::GeneralMessage ()
- : m_family(0)
-{}
-GeneralMessage::~GeneralMessage ()
-{}
-
-void
-GeneralMessage::SetFamily (uint8_t v)
-{
- m_family = v;
-}
-uint8_t
-GeneralMessage::GetFamily (void) const
-{
- return m_family;
-}
-
-TypeId
-GeneralMessage::GetTypeId (void)
-{
- static TypeId tid = TypeId ("ns3::GeneralMessage")
- .SetParent<NetlinkPayload> ()
- .AddConstructor<GeneralMessage> ()
- ;
- return tid;
-}
-
-TypeId
-GeneralMessage::GetInstanceTypeId (void) const
-{
- return GetTypeId ();
-}
-void
-GeneralMessage::Print (std::ostream &os) const
-{
- os << " ----GeneralMessage ("
- << "family: " << (uint32_t)m_family << ")";
-}
-
-uint32_t
-GeneralMessage::GetSerializedSize (void) const
-{
- /* this is the size of an nlmsghdr payload. */
- return NETLINK_MSG_ALIGN (NETLINK_GENMSG_SIZE);
-}
-
-
-void
-GeneralMessage::Serialize (Buffer::Iterator& start) const
-{
- start.WriteU8 (m_family);
- start.WriteU8 (0, 3);
-}
-
-uint32_t
-GeneralMessage::Deserialize (Buffer::Iterator& start)
-{
- uint8_t buf[3];
- m_family = start.ReadU8 ();
- start.Read (buf, 3);
- return GetSerializedSize ();
-}
-uint32_t
-GeneralMessage::Deserialize (Buffer::Iterator& start, uint32_t len)
-{
- uint8_t buf[3];
- m_family = start.ReadU8 ();
- start.Read (buf, 3);
- return GetSerializedSize ();
-}
-
-
-uint32_t
-GeneralMessage::GetNNetlinkAttribute (void)const
-{
- return m_attributes.size ();
-}
-NetlinkAttribute
-GeneralMessage::GetNetlinkAttribute (uint32_t index)const
-{
- NS_ASSERT(index < GetNNetlinkAttribute ());
- return m_attributes[index];
-}
-
-uint32_t
-GeneralMessage::GetAttributeSerializedSize (void) const
-{
- uint32_t size = 0;
-
- for (uint32_t i = 0; i < m_attributes.size (); i ++)
- {
- size += m_attributes[i].GetSerializedSize ();
- }
- return size;
-}
-bool
-GeneralMessage::GetAttributeByType (NetlinkAttribute& attr, uint16_t type)
-{
- for (uint32_t i = 0; i < m_attributes.size (); i ++)
- {
- if (type == m_attributes[i].GetAttrType ())
- {
- attr = m_attributes[i];
- return true;
- }
- }
- return false;
-}
-void
-GeneralMessage::AppendAttribute (NetlinkAttribute v)
-{
- m_attributes.push_back (v);
-}
-
-void
-GeneralMessage::SerializeAttribute (Buffer::Iterator& start) const
-{
- for (uint32_t i = 0; i < m_attributes.size (); i ++)
- {
- m_attributes[i].Serialize (start);
- }
-}
-
-void
-GeneralMessage::PrintAttribute (std::ostream &os) const
-{
- for (uint32_t i = 0; i < m_attributes.size (); i ++)
- {
- os << " ----Attribute (" << i << "):";
- m_attributes[i].Print(os);
- }
-}
-
-/***********************************************************************************
-* \ InterfaceInfoMessage
-***********************************************************************************/
-InterfaceInfoMessage::InterfaceInfoMessage ()
- : m_reserved (0),
- m_deviceType (0),
- m_interfaceIndex(0),
- m_deviceFlags (0),
- m_changeMask (0)
-{
- memset ((void*)m_attributeTypes, 0, sizeof (m_attributeTypes));
- m_attributeTypes[IFL_A_UNSPEC] = UNSPEC;
- m_attributeTypes[IFL_A_ADDRESS] = ADDRESS;
- m_attributeTypes[IFL_A_BROADCAST] = ADDRESS;
- m_attributeTypes[IFL_A_IFNAME] = STRING;
- m_attributeTypes[IFL_A_MTU] = U32;
- m_attributeTypes[IFL_A_LINK] = U32;
- m_attributeTypes[IFL_A_QDISC] = U8;
- m_attributeTypes[IFL_A_STATS] = UNSPEC;
- m_attributeTypes[IFL_A_COST] = UNSPEC;
-}
-InterfaceInfoMessage::~InterfaceInfoMessage ()
-{}
-void
-InterfaceInfoMessage::SetDeviceType (uint16_t type)
-{
- m_deviceType = type;
-}
-void
-InterfaceInfoMessage::SetInterfaceIndex (int32_t index)
-{
- m_interfaceIndex = index;
-}
-void
-InterfaceInfoMessage::SetDeviceFlags (uint32_t flags)
-{
- m_deviceFlags = flags;
-}
-void
-InterfaceInfoMessage::SetChangeMask (uint32_t mask)
-{
- m_changeMask = mask;
-}
-uint16_t
-InterfaceInfoMessage::GetDeviceType (void) const
-{
- return m_deviceType;
-}
-int32_t
-InterfaceInfoMessage::GetInterfaceIndex (void) const
-{
- return m_interfaceIndex;
-}
-uint32_t
-InterfaceInfoMessage::GetDeviceFlags (void) const
-{
- return m_deviceFlags;
-}
-uint32_t
-InterfaceInfoMessage::GetChangeMask (void) const
-{
- return m_changeMask;
-}
-TypeId
-InterfaceInfoMessage::GetTypeId (void)
-{
- static TypeId tid = TypeId ("ns3::InterfaceInfoMessage")
- .SetParent<GeneralMessage> ()
- .AddConstructor<InterfaceInfoMessage> ()
- ;
- return tid;
-}
-TypeId
-InterfaceInfoMessage::GetInstanceTypeId (void) const
-{
- return GetTypeId ();
-}
-void
-InterfaceInfoMessage::Print (std::ostream &os) const
-{
- os << " ----InterfaceInfoMessage ("
- << "deviceType: " << m_deviceType << " "
- << "interfaceIndex: " << m_interfaceIndex << " "
- << "deviceFlags: " << m_deviceFlags << " "
- << "changeMask: " << m_changeMask << ")" ;
- PrintAttribute (os);
-}
-uint32_t
-InterfaceInfoMessage::GetSerializedSize (void) const
-{
- return NETLINK_INTERFACE_SIZE + GetAttributeSerializedSize ();
-}
-
-void
-InterfaceInfoMessage::Serialize (Buffer::Iterator& start) const
-{
- start.WriteU8 (m_family);
- start.WriteU8 (m_reserved);
- start.WriteU16 (m_deviceType);
- start.WriteU32 (m_interfaceIndex);
- start.WriteU32 (m_deviceFlags);
- start.WriteU32 (m_changeMask);
-
- SerializeAttribute (start);
-}
-uint32_t
-InterfaceInfoMessage::Deserialize (Buffer::Iterator& start, uint32_t len)
-{
- m_family = start.ReadU8 ();
- m_reserved = start.ReadU8 ();
- m_deviceType = start.ReadU16 ();
- m_interfaceIndex = start.ReadU32 ();
- m_deviceFlags = start.ReadU32 ();
- m_changeMask = start.ReadU32 ();
-
- len -= NETLINK_INTERFACE_SIZE;
-
- while (len)
- {
- NetlinkAttribute attr;
-
- len -= attr.Deserialize (start, m_attributeTypes);
- m_attributes.push_back (attr);
- }
-
- return GetSerializedSize ();
-}
-
-
-
-/***********************************************************************************
-* \InterfaceAddressMessage
-***********************************************************************************/
-InterfaceAddressMessage::InterfaceAddressMessage ()
- : m_length (0),
- m_flags (0),
- m_scope (0),
- m_index(0)
-{
- memset ((void*)m_attributeTypes, 0, sizeof (m_attributeTypes));
- m_attributeTypes[IF_A_UNSPEC] = UNSPEC;
- m_attributeTypes[IF_A_ADDRESS] = ADDRESS;
- m_attributeTypes[IF_A_LOCAL] = ADDRESS;
- m_attributeTypes[IF_A_LABEL] = STRING;
- m_attributeTypes[IF_A_BROADCAST] = ADDRESS;
- m_attributeTypes[IF_A_ANYCAST] = ADDRESS;
- m_attributeTypes[IF_A_CACHEINFO] = UNSPEC;
- m_attributeTypes[IF_A_MULTICAST] = ADDRESS;
-}
-InterfaceAddressMessage::~InterfaceAddressMessage ()
-{
-}
-void
-InterfaceAddressMessage::SetFamily (uint8_t family)
-{
- m_family = family;
-}
-void
-InterfaceAddressMessage::SetLength (uint8_t length)
-{
- m_length = length;
-}
-void
-InterfaceAddressMessage::SetFlags (uint8_t flags)
-{
- m_flags = flags;
-}
-void
-InterfaceAddressMessage::SetScope (uint8_t scope)
-{
- m_scope = scope;
-}
-void
-InterfaceAddressMessage::SetInterfaceIndex (int32_t index)
-{
- m_index = index;
-}
-
-uint8_t
-InterfaceAddressMessage::GetFamily (void) const
-{
- return m_family;
-}
-uint8_t
-InterfaceAddressMessage::GetLength (void) const
-{
- return m_length;
-}
-uint8_t
-InterfaceAddressMessage::GetFlags (void) const
-{
- return m_flags;
-}
-uint8_t
-InterfaceAddressMessage::GetScope (void) const
-{
- return m_scope;
-}
-int32_t
-InterfaceAddressMessage::GetInterfaceIndex (void) const
-{
- return m_index;
-}
-
-TypeId
-InterfaceAddressMessage::GetTypeId (void)
-{
- static TypeId tid = TypeId ("ns3::InterfaceAddressMessage")
- .SetParent<GeneralMessage> ()
- .AddConstructor<InterfaceAddressMessage> ()
- ;
- return tid;
-}
-TypeId
-InterfaceAddressMessage::GetInstanceTypeId (void) const
-{
- return GetTypeId ();
-}
-void
-InterfaceAddressMessage::Print (std::ostream &os) const
-{
- os << " ----InterfaceAddressMessage ("
- << "family: " << (uint32_t)m_family << " "
- << "length: " << (uint32_t)m_length << " "
- << "flags: " << (uint32_t)m_flags << " "
- << "scope: " << (uint32_t)m_scope << " "
- << "index: " << m_index << ")";
- PrintAttribute (os);
-}
-uint32_t
-InterfaceAddressMessage::GetSerializedSize (void) const
-{
- return NETLINK_ADDRESS_SIZE + GetAttributeSerializedSize ();
-}
-
-void
-InterfaceAddressMessage::Serialize (Buffer::Iterator& start) const
-{
- start.WriteU8 (m_family);
- start.WriteU8 (m_length);
- start.WriteU8 (m_flags);
- start.WriteU8 (m_scope);
- start.WriteU32 (m_index);
-
- SerializeAttribute(start);
-}
-
-uint32_t
-InterfaceAddressMessage::Deserialize (Buffer::Iterator& start, uint32_t len)
-{
- m_family = start.ReadU8 ();
- m_length = start.ReadU8 ();
- m_flags = start.ReadU8 ();
- m_scope = start.ReadU8 ();
- m_index = start.ReadU32 ();
-
- len -= NETLINK_ADDRESS_SIZE;
-
- while (len)
- {
- NetlinkAttribute attr;
-
- len -= attr.Deserialize (start, m_attributeTypes);
- m_attributes.push_back (attr);
- }
-
- return GetSerializedSize ();
-}
-
-
-
-/***********************************************************************************
-* \ RouteMessage
-***********************************************************************************/
-RouteMessage::RouteMessage ()
- : m_dstLen (0),
- m_srcLen (0),
- m_tos (0),
- m_tableId (0),
- m_protocol(0),
- m_scope (0),
- m_type (0),
- m_flags (0)
-{
- memset ((void*)m_attributeTypes, 0, sizeof (m_attributeTypes));
- m_attributeTypes[RT_A_UNSPEC] = UNSPEC;
- m_attributeTypes[RT_A_DST] = ADDRESS;
- m_attributeTypes[RT_A_SRC] = ADDRESS;
- m_attributeTypes[RT_A_IIF] = U32;
- m_attributeTypes[RT_A_OIF] = U32;
- m_attributeTypes[RT_A_GATEWAY] = ADDRESS;
- m_attributeTypes[RT_A_PRIORITY] = U8;
- m_attributeTypes[RT_A_PREFSRC] = ADDRESS;
- m_attributeTypes[RT_A_METRICS] = UNSPEC;
- //others default value UNSPEC
-}
-RouteMessage::~RouteMessage ()
-{}
-
-void
-RouteMessage::SetFamily (uint8_t v)
-{
- m_family = v;
-}
-void
-RouteMessage::SetDstLength (uint8_t v)
-{
- m_dstLen = v;
-}
-void
-RouteMessage::SetSrcLength (uint8_t v)
-{
- m_srcLen = v;
-}
-void
-RouteMessage::SetTos (uint8_t v)
-{
- m_tos = v;
-}
-void
-RouteMessage::SetTableId (uint8_t v)
-{
- m_tableId = v;
-}
-void
-RouteMessage::SetProtocol (uint8_t v)
-{
- m_protocol = v;
-}
-void
-RouteMessage::SetScope (uint8_t v)
-{
- m_scope = v;
-}
-void
-RouteMessage::SetType (uint8_t v)
-{
- m_type = v;
-}
-void
-RouteMessage::SetFlags (uint32_t v)
-{
- m_flags = v;
-}
-uint8_t
-RouteMessage::GetFamily (void) const
-{
- return m_family;
-}
-uint8_t
-RouteMessage::GetDstLength (void) const
-{
- return m_dstLen;
-}
-uint8_t
-RouteMessage::GetSrcLength (void) const
-{
- return m_srcLen;
-}
-uint8_t
-RouteMessage::GetTos (void) const
-{
- return m_tos;
-}
-uint8_t
-RouteMessage::GetTableId (void) const
-{
- return m_tableId;
-}
-uint8_t
-RouteMessage::GetProtocol (void) const
-{
- return m_protocol;
-}
-uint8_t
-RouteMessage::GetType (void) const
-{
- return m_type;
-}
-uint8_t
-RouteMessage::GetScope (void) const
-{
- return m_scope;
-}
-uint32_t
-RouteMessage::GetFlags (void) const
-{
- return m_flags;
-}
-
-TypeId
-RouteMessage::GetTypeId (void)
-{
- static TypeId tid = TypeId ("ns3::RouteMessage")
- .SetParent<GeneralMessage> ()
- .AddConstructor<RouteMessage> ()
- ;
- return tid;
-}
-TypeId
-RouteMessage::GetInstanceTypeId (void) const
-{
- return GetTypeId ();
-}
-void
-RouteMessage::Print (std::ostream &os) const
-{
- os << " ----RouteMessage ("
- << "family: " << (uint32_t)m_family << " "
- << "dstLen: " << (uint32_t)m_dstLen << " "
- << "srcLen: " << (uint32_t)m_srcLen << " "
- << "tos: " << (uint32_t)m_tos << " "
- << "tableId: " << (uint32_t)m_tableId << " "
- << "protocol: " << (uint32_t)m_protocol << " "
- << "scope: " << (uint32_t)m_scope << " "
- << "type: " << (uint32_t)m_type << " "
- << "flags: " << m_flags<< ")" ;
- PrintAttribute (os);
-}
-uint32_t
-RouteMessage::GetSerializedSize (void) const
-{
- return NETLINK_ROUTE_SIZE + GetAttributeSerializedSize ();
-}
-
-void
-RouteMessage::Serialize (Buffer::Iterator& start) const
-{
- start.WriteU8 (m_family);
- start.WriteU8 (m_dstLen);
- start.WriteU8 (m_srcLen);
- start.WriteU8 (m_tos);
- start.WriteU8 (m_tableId);
- start.WriteU8 (m_protocol);
- start.WriteU8 (m_scope);
- start.WriteU8 (m_type);
- start.WriteU32 (m_flags);
-
- SerializeAttribute (start);
-}
-uint32_t
-RouteMessage::Deserialize (Buffer::Iterator& start, uint32_t len)
-{
- m_family = start.ReadU8 ();
- m_dstLen = start.ReadU8 ();
- m_srcLen = start.ReadU8 ();
- m_tos = start.ReadU8 ();
- m_tableId = start.ReadU8 ();
- m_protocol = start.ReadU8 ();
- m_scope = start.ReadU8 ();
- m_type = start.ReadU8 ();
- m_flags = start.ReadU32 ();
-
- len -= NETLINK_ROUTE_SIZE;
-
- while (len)
- {
- NetlinkAttribute attr;
-
- len -= attr.Deserialize (start, m_attributeTypes);
- m_attributes.push_back (attr);
- }
-
- return GetSerializedSize ();
-}
-}; // namespace ns3