// The destination used here must be the *final* destination ...
summer.feed( ipv6->destination().i(),
ipv6->destination().i() + IPv6PacketParser::destination_t::fixed_bytes );
- /// This is a simplification. The value is really 32bit to support UDP Jumbograms
- /// (RFC2147). However, skipping an even number of 0 bytes does not change the checksum
+ // This is a simplification. The value is really 32bit to support UDP Jumbograms
+ // (RFC2147). However, skipping an even number of 0 bytes does not change the checksum
summer.feed( i() + length_offset, i() + length_offset + 2 );
// RFC2460 specifies, that this must always be 17, not the value used in the ipv6
// header
Parser implementing the UDP header. The fields implemented are:
- \see UDPPacketType
+ \see UDPPacketType \n
<a href="http://tools.ietf.org/html/rfc768">RFC 768</a>
*/
struct UDPPacketParser : public PacketParserBase
/** \file
\brief Scheduler non-inline non-template implementation
- \idea Implement signal handling (See source for more discussion
- about this)
-
\idea Multithreading support: To support multithreading, the
static member Scheduler::instance() must return a thread-local
value (that is Scheduler::instance() must allocate one Scheduler
/** \brief NetdeviceController
\todo document me
+ \todo Add 'promisc' member to enable/disable promiscuous mode
*/
class NetdeviceController
{
timing.
\pre The \c SO_TIMESTAMP socket option must not be set
on the socket.
- \returns timestamp when last packet was received
- \todo Move this to DatagramSocketProtocol class */
+ \returns timestamp when last packet was received */
};
*/
class ConnectedRawV4SocketProtocol
: public ConcreteSocketProtocol<ConnectedRawV4Socket_Policy, ConnectedRawV4SocketProtocol>,
- public IPv4Protocol,
public RawINetProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol
*/
class ConnectedRawV6SocketProtocol
: public ConcreteSocketProtocol<ConnectedRawV6Socket_Policy, ConnectedRawV6SocketProtocol>,
- public IPv6Protocol,
public RawINetProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol
*/
class ConnectedUDPv4SocketProtocol
: public ConcreteSocketProtocol<ConnectedUDPv4Socket_Policy, ConnectedUDPv4SocketProtocol>,
- public IPv4Protocol,
public UDPProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol
*/
class ConnectedUDPv6SocketProtocol
: public ConcreteSocketProtocol<ConnectedUDPv6Socket_Policy, ConnectedUDPv6SocketProtocol>,
- public IPv6Protocol,
public UDPProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol
\returns Bound interface name */
};
- /** \brief Protocol facet providing IPv4 Addressing related API
-
- This protocol facet introduces all the socket api protocol members which are related to IPv4
- addressing.
-
- \todo Is it safe, not to allow setting the interface index on add/drop? what does it do
- (especially if the local address is given ?). What have I been thinking here ???
-
- \todo connect() is only available on stream sockets. We want to access bind() and connect()
- via the ClientSocketHandle -> see SocketProtocol todo point
- */
- class IPv4Protocol
- : public virtual SocketProtocol
- {
- public:
- };
-
- /** \brief Protocol facet providing IPv6 Addressing related API
-
- This protocol facet introduces all the socket api protocol members which are related to IPv6
- addressing.
- */
- class IPv6Protocol
- : public virtual SocketProtocol
- {
- public:
- };
-
/// @}
}
*/
class RawV4SocketProtocol
: public ConcreteSocketProtocol<RawV4Socket_Policy, RawV4SocketProtocol>,
- public IPv4Protocol,
public RawINetProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol,
*/
class RawV6SocketProtocol
: public ConcreteSocketProtocol<RawV6Socket_Policy,RawV6SocketProtocol>,
- public IPv6Protocol,
public RawINetProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol,
*/
class TCPv4SocketProtocol
: public ConcreteSocketProtocol<TCPv4Socket_Policy,TCPv4SocketProtocol>,
- public IPv4Protocol,
public TCPProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol
*/
class TCPv6SocketProtocol
: public ConcreteSocketProtocol<TCPv6Socket_Policy,TCPv6SocketProtocol>,
- public IPv6Protocol,
public TCPProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol
This protocol facet provides all those protocol functions,
which are available on any UDP socket.
-
- \todo the multicast add/remove/iface semantics are quite unclear ...
*/
class UDPProtocol
: public virtual SocketProtocol
*/
class UDPv4SocketProtocol
: public ConcreteSocketProtocol<UDPv4Socket_Policy, UDPv4SocketProtocol>,
- public IPv4Protocol,
public UDPProtocol,
public MulticastProtocol,
public INet4MulticastProtocol,
*/
class UDPv6SocketProtocol
: public ConcreteSocketProtocol<UDPv6Socket_Policy, UDPv6SocketProtocol>,
- public IPv6Protocol,
public UDPProtocol,
public MulticastProtocol,
public INet6MulticastProtocol,
/** \file
\brief PacketProtocol and PacketSocketHandle public header
-
- \todo Implement global promisc() helper based on ioctl() interface.
*/
#ifndef HH_PacketSocketHandle_
/** \file
\brief PacketProtocol and PacketSocketHandle public header
-
- \todo Implement global promisc() helper based on ioctl() interface.
*/
#ifndef HH_TunTapSocketHandle_
/** \file
\brief Policy Framework public header
- \todo Do we want to support separate read and write policies. This allows to treat pipes within
- this framework however, is this worth the effort?
-
- \idea Creating a new Socket will create 4 (!) new instances (The handle, the body, the policy
- and the protocol) of which 3 (argh) (body, policy and protocol) live on the heap. This is
- expensive. We should convert all the policy classes to singletons and assign the same
- instance to all socket bodies with the same policy. This would reduce the number of heap
- allocations per socket handle to two.
+ \idea Creating a new Socket will create 3 new instances (The handle, the body, the policy) of
+ which 2 (argh) (body, policy) live on the heap. This is expensive. We should convert all the
+ policy classes to singletons and assign the same instance to all socket bodies with the same
+ policy. This would reduce the number of heap allocations per socket handle to one (which is
+ already optimized using the pool_alloc_mixin)
*/
/** \defgroup policy_group The Policy Framework
/** \file
\brief SocketProtocol and ConcreteSocketProtocol public header
-
- \idea We should optimize the protocol handling. Allocating a protocol instance for every socket
- body seems quite wasteful. We could derive SocketPolicy from SocketBody (probably privately,
- since private inheritance models more of 'has a' than 'is a'). This would allow to reduce
- the number of heap-allocations per socket to one which is good.
*/
// The private inheritance idea should indeed work very well: We just need to change the
\see
\ref handle_group \n
\ref policy_group
-
- \todo Complete the protocol interface implementations. Better distribution of members to
- protocol facets and more precise distribution of functionality among the facets.
*/
/** \defgroup concrete_protocol_group Protocol Implementations (Concrete Protocol Classes)
echo "\$ nice ${SCONS:-scons} -kj2 all ${DOXYGEN:+DOXYGEN="$DOXYGEN"}"
nice ${SCONS:-scons} -kj2 all ${DOXYGEN:+DOXYGEN="$DOXYGEN"}
+echo "\$ nice ${SCONS:-scons} all ${DOXYGEN:+DOXYGEN="$DOXYGEN"}"
+nice ${SCONS:-scons} all ${DOXYGEN:+DOXYGEN="$DOXYGEN"}
echo "\$ nice ${SCONS:-scons} linklint ${DOXYGEN:+DOXYGEN="$DOXYGEN"}"
nice ${SCONS:-scons} linklint ${DOXYGEN:+DOXYGEN="$DOXYGEN"}
echo "\$ nice ${SCONS:-scons} fixlinks ${DOXYGEN:+DOXYGEN="$DOXYGEN"}"