Fix documentation build under maverick (doxygen 1.7.1)
[senf.git] / senf / Socket / Protocols / Raw / LLAddressing.cc
1 // $Id$
2 //
3 // Copyright (C) 2006
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 //     Stefan Bund <g0dil@berlios.de>
7 //
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
12 //
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 // GNU General Public License for more details.
17 //
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22
23 /** \file
24     \brief LLSocketAddress and LLAddressingPolicy non-inline non-template implementation
25  */
26
27 #include "LLAddressing.hh"
28 //#include "LLAddressing.ih"
29
30 // Custom includes
31 #include <net/if.h>
32 #include <sys/socket.h>
33
34 #include <boost/algorithm/string/classification.hpp>
35 #include <boost/algorithm/string/finder.hpp>
36
37 #include <senf/Socket/Protocols/AddressExceptions.hh>
38
39 //#include "LLAddressing.mpp"
40 #define prefix_
41 //-/////////////////////////////////////////////////////////////////////////////////////////////////
42
43 prefix_ std::string senf::LLSocketAddress::interface()
44     const
45 {
46     if (addr_.sll_ifindex == 0)
47         return std::string();
48     char name[IFNAMSIZ];
49     ::bzero(name, IFNAMSIZ);
50     if (! ::if_indextoname(addr_.sll_ifindex, name))
51         throw UnknownInterfaceException();
52     return std::string(name);
53 }
54
55 prefix_ void senf::LLSocketAddress::interface(std::string const & iface)
56 {
57     if (iface.empty())
58         addr_.sll_ifindex = 0;
59     else {
60         addr_.sll_ifindex = if_nametoindex(iface.c_str());
61         if (addr_.sll_ifindex == 0)
62             throw UnknownInterfaceException(iface);
63     }
64 }
65
66 prefix_ std::ostream & senf::operator<<(std::ostream & os, LLSocketAddress const & llAddr)
67 {
68     os << "[" << llAddr.address()
69        << '%' << llAddr.interface()
70        << ' ' << llAddr.protocol()
71        << ' ' << llAddr.arptype()
72        << ( llAddr.pkttype() == senf::LLSocketAddress::Host ? " Host" :
73             llAddr.pkttype() == senf::LLSocketAddress::Broadcast ? " Broadcast" :
74             llAddr.pkttype() == senf::LLSocketAddress::Multicast ? " Multicast" :
75             llAddr.pkttype() == senf::LLSocketAddress::OtherHost ? " OtherHost" :
76             llAddr.pkttype() == senf::LLSocketAddress::Outgoing ? " Outgoing" :
77             llAddr.pkttype() == senf::LLSocketAddress::Broadcast ? "Broadcast" : "" )
78        << "]";
79     return os;
80 }
81
82 //-/////////////////////////////////////////////////////////////////////////////////////////////////
83 #undef prefix_
84 //#include "LLAddressing.mpp"
85
86 \f
87 // Local Variables:
88 // mode: c++
89 // fill-column: 100
90 // c-file-style: "senf"
91 // indent-tabs-mode: nil
92 // ispell-local-dictionary: "american"
93 // compile-command: "scons -u test"
94 // comment-column: 40
95 // End: