src/node/packet-socket.cc
changeset 2983 e3a416fe9dd5
parent 2783 6c9853569bbf
child 3018 0ac9b895494d
child 3097 1b1661bbfa33
equal deleted inserted replaced
2982:a7e3e54c7e94 2983:e3a416fe9dd5
    29 
    29 
    30 namespace ns3 {
    30 namespace ns3 {
    31 
    31 
    32 PacketSocket::PacketSocket ()
    32 PacketSocket::PacketSocket ()
    33 {
    33 {
    34   NS_LOG_FUNCTION;
    34   NS_LOG_FUNCTION_NOARGS ();
    35   NS_LOG_FUNCTION;
       
    36   m_state = STATE_OPEN;
    35   m_state = STATE_OPEN;
    37   m_shutdownSend = false;
    36   m_shutdownSend = false;
    38   m_shutdownRecv = false;
    37   m_shutdownRecv = false;
    39   m_errno = ERROR_NOTERROR;
    38   m_errno = ERROR_NOTERROR;
    40 }
    39 }
    45   m_node = node;
    44   m_node = node;
    46 }
    45 }
    47 
    46 
    48 PacketSocket::~PacketSocket ()
    47 PacketSocket::~PacketSocket ()
    49 {
    48 {
    50   NS_LOG_FUNCTION;
    49   NS_LOG_FUNCTION_NOARGS ();
    51 }
    50 }
    52 
    51 
    53 void 
    52 void 
    54 PacketSocket::DoDispose (void)
    53 PacketSocket::DoDispose (void)
    55 {
    54 {
    56   NS_LOG_FUNCTION;
    55   NS_LOG_FUNCTION_NOARGS ();
    57   m_device = 0;
    56   m_device = 0;
    58 }
    57 }
    59 
    58 
    60 enum Socket::SocketErrno
    59 enum Socket::SocketErrno
    61 PacketSocket::GetErrno (void) const
    60 PacketSocket::GetErrno (void) const
    62 {
    61 {
    63   NS_LOG_FUNCTION;
    62   NS_LOG_FUNCTION_NOARGS ();
    64   return m_errno;
    63   return m_errno;
    65 }
    64 }
    66 
    65 
    67 Ptr<Node>
    66 Ptr<Node>
    68 PacketSocket::GetNode (void) const
    67 PacketSocket::GetNode (void) const
    69 {
    68 {
    70   NS_LOG_FUNCTION;
    69   NS_LOG_FUNCTION_NOARGS ();
    71   return m_node;
    70   return m_node;
    72 }
    71 }
    73 
    72 
    74 int
    73 int
    75 PacketSocket::Bind (void)
    74 PacketSocket::Bind (void)
    76 {
    75 {
    77   NS_LOG_FUNCTION;
    76   NS_LOG_FUNCTION_NOARGS ();
    78   PacketSocketAddress address;
    77   PacketSocketAddress address;
    79   address.SetProtocol (0);
    78   address.SetProtocol (0);
    80   address.SetAllDevices ();
    79   address.SetAllDevices ();
    81   return DoBind (address);
    80   return DoBind (address);
    82 }
    81 }
    83 
    82 
    84 int
    83 int
    85 PacketSocket::Bind (const Address &address)
    84 PacketSocket::Bind (const Address &address)
    86 { 
    85 { 
    87   NS_LOG_FUNCTION;
    86   NS_LOG_FUNCTION_NOARGS ();
    88   if (!PacketSocketAddress::IsMatchingType (address))
    87   if (!PacketSocketAddress::IsMatchingType (address))
    89     {
    88     {
    90       m_errno = ERROR_INVAL;
    89       m_errno = ERROR_INVAL;
    91       return -1;
    90       return -1;
    92     }
    91     }
    95 }
    94 }
    96 
    95 
    97 int
    96 int
    98 PacketSocket::DoBind (const PacketSocketAddress &address)
    97 PacketSocket::DoBind (const PacketSocketAddress &address)
    99 {
    98 {
   100   NS_LOG_FUNCTION;
    99   NS_LOG_FUNCTION_NOARGS ();
   101   if (m_state == STATE_BOUND ||
   100   if (m_state == STATE_BOUND ||
   102       m_state == STATE_CONNECTED)
   101       m_state == STATE_CONNECTED)
   103     {
   102     {
   104       m_errno = ERROR_INVAL;
   103       m_errno = ERROR_INVAL;
   105       return -1;
   104       return -1;
   128 }
   127 }
   129 
   128 
   130 int
   129 int
   131 PacketSocket::ShutdownSend (void)
   130 PacketSocket::ShutdownSend (void)
   132 {
   131 {
   133   NS_LOG_FUNCTION;
   132   NS_LOG_FUNCTION_NOARGS ();
   134   if (m_state == STATE_CLOSED)
   133   if (m_state == STATE_CLOSED)
   135     {
   134     {
   136       m_errno = ERROR_BADF;
   135       m_errno = ERROR_BADF;
   137       return -1;
   136       return -1;
   138     }
   137     }
   141 }
   140 }
   142 
   141 
   143 int
   142 int
   144 PacketSocket::ShutdownRecv (void)
   143 PacketSocket::ShutdownRecv (void)
   145 {
   144 {
   146   NS_LOG_FUNCTION;
   145   NS_LOG_FUNCTION_NOARGS ();
   147   if (m_state == STATE_CLOSED)
   146   if (m_state == STATE_CLOSED)
   148     {
   147     {
   149       m_errno = ERROR_BADF;
   148       m_errno = ERROR_BADF;
   150       return -1;
   149       return -1;
   151     }
   150     }
   154 }
   153 }
   155 
   154 
   156 int
   155 int
   157 PacketSocket::Close(void)
   156 PacketSocket::Close(void)
   158 {
   157 {
   159   NS_LOG_FUNCTION;
   158   NS_LOG_FUNCTION_NOARGS ();
   160   if (m_state == STATE_CLOSED)
   159   if (m_state == STATE_CLOSED)
   161     {
   160     {
   162       m_errno = ERROR_BADF;
   161       m_errno = ERROR_BADF;
   163       return -1;
   162       return -1;
   164     }
   163     }
   168 }
   167 }
   169 
   168 
   170 int
   169 int
   171 PacketSocket::Connect(const Address &ad)
   170 PacketSocket::Connect(const Address &ad)
   172 {
   171 {
   173   NS_LOG_FUNCTION;
   172   NS_LOG_FUNCTION_NOARGS ();
   174   PacketSocketAddress address;
   173   PacketSocketAddress address;
   175   if (m_state == STATE_CLOSED)
   174   if (m_state == STATE_CLOSED)
   176     {
   175     {
   177       m_errno = ERROR_BADF;
   176       m_errno = ERROR_BADF;
   178       goto error;
   177       goto error;
   203 }
   202 }
   204 
   203 
   205 int
   204 int
   206 PacketSocket::Send (Ptr<Packet> p)
   205 PacketSocket::Send (Ptr<Packet> p)
   207 {
   206 {
   208   NS_LOG_FUNCTION;
   207   NS_LOG_FUNCTION_NOARGS ();
   209   if (m_state == STATE_OPEN ||
   208   if (m_state == STATE_OPEN ||
   210       m_state == STATE_BOUND)
   209       m_state == STATE_BOUND)
   211     {
   210     {
   212       m_errno = ERROR_NOTCONN;
   211       m_errno = ERROR_NOTCONN;
   213       return -1;
   212       return -1;
   216 }
   215 }
   217 
   216 
   218 int
   217 int
   219 PacketSocket::SendTo(const Address &address, Ptr<Packet> p)
   218 PacketSocket::SendTo(const Address &address, Ptr<Packet> p)
   220 {
   219 {
   221   NS_LOG_FUNCTION;
   220   NS_LOG_FUNCTION_NOARGS ();
   222   PacketSocketAddress ad;
   221   PacketSocketAddress ad;
   223   if (m_state == STATE_CLOSED)
   222   if (m_state == STATE_CLOSED)
   224     {
   223     {
   225       NS_LOG_LOGIC ("ERROR_BADF");
   224       NS_LOG_LOGIC ("ERROR_BADF");
   226       m_errno = ERROR_BADF;
   225       m_errno = ERROR_BADF;
   289 
   288 
   290 void 
   289 void 
   291 PacketSocket::ForwardUp (Ptr<NetDevice> device, Ptr<Packet> packet, 
   290 PacketSocket::ForwardUp (Ptr<NetDevice> device, Ptr<Packet> packet, 
   292                          uint16_t protocol, const Address &from)
   291                          uint16_t protocol, const Address &from)
   293 {
   292 {
   294   NS_LOG_FUNCTION;
   293   NS_LOG_FUNCTION_NOARGS ();
   295   if (m_shutdownRecv)
   294   if (m_shutdownRecv)
   296     {
   295     {
   297       return;
   296       return;
   298     }
   297     }
   299 
   298