// $Id$
//
// Copyright (C) 2006
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-// Stefan Bund <stefan.bund@fokus.fraunhofer.de>
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
#define prefix_ inline
///////////////////////////////cci.p///////////////////////////////////////
+prefix_ void senf::LLSocketAddress::clear()
+{
+ ::memset(&addr_,0,sizeof(addr_));
+ addr_.sll_family = AF_PACKET;
+}
+
+prefix_ void senf::LLSocketAddress::address(MACAddress const & addr)
+{
+ std::copy(addr.begin(), addr.end(),&addr_.sll_addr[0]);
+}
+
prefix_ senf::LLSocketAddress::LLSocketAddress()
{
clear();
}
-prefix_ senf::LLSocketAddress::LLSocketAddress(unsigned protocol, std::string interface)
+prefix_ void senf::LLSocketAddress::protocol(unsigned prot)
+{
+ addr_.sll_protocol = htons(prot);
+}
+
+prefix_ senf::LLSocketAddress::LLSocketAddress(unsigned prot, std::string const & iface)
{
clear();
- this->protocol(protocol);
- this->interface(interface);
+ protocol(prot);
+ interface(iface);
}
-prefix_ senf::LLSocketAddress::LLSocketAddress(std::string interface)
+prefix_ senf::LLSocketAddress::LLSocketAddress(std::string const &iface)
{
clear();
- this->interface(interface);
+ interface(iface);
}
-prefix_ void senf::LLSocketAddress::clear()
+prefix_ senf::LLSocketAddress::LLSocketAddress(MACAddress const & addr,
+ std::string const & iface)
{
- ::memset(&addr_,0,sizeof(addr_));
- addr_.sll_family = AF_PACKET;
+ clear();
+ address(addr);
+ interface(iface);
}
prefix_ unsigned senf::LLSocketAddress::protocol()
prefix_ unsigned senf::LLSocketAddress::arptype()
const
{
- /** \todo make sure, that the value really is in network byte
- order */
return ntohs(addr_.sll_hatype);
}
-prefix_ unsigned senf::LLSocketAddress::pkttype()
+prefix_ senf::LLSocketAddress::PktType senf::LLSocketAddress::pkttype()
const
{
- /** \todo make sure, that the value really is in network byte
- order */
- return ntohs(addr_.sll_pkttype);
+ return PktType(ntohs(addr_.sll_pkttype));
}
-prefix_ senf::LLSocketAddress::LLAddress senf::LLSocketAddress::address()
+prefix_ senf::MACAddress senf::LLSocketAddress::address()
const
{
- return LLAddress(&addr_.sll_addr[0], &addr_.sll_addr[addr_.sll_halen]);
-}
-
-prefix_ void senf::LLSocketAddress::protocol(unsigned protocol)
-{
- addr_.sll_protocol = htons(protocol);
+ return MACAddress::from_data(&addr_.sll_addr[0]);
}
prefix_ struct sockaddr * senf::LLSocketAddress::sockaddr_p()
return sizeof(addr_);
}
+prefix_ std::ostream & senf::operator<<(std::ostream & os, LLSocketAddress const & llAddr)
+{
+ // TODO: expose more bytes from sockaddr_ll addr_
+ os << "[some LLSocketAddress]";
+ return os;
+}
+
///////////////////////////////cci.e///////////////////////////////////////
#undef prefix_