switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Socket / Protocols / Raw / LLAddressing.hh
index 78a1c32..8a60a8f 100644 (file)
@@ -2,23 +2,28 @@
 //
 // Copyright (C) 2006
 // 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
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
+// The contents of this file are subject to the Fraunhofer FOKUS Public License
+// Version 1.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at 
+// http://senf.berlios.de/license.html
 //
-// 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.
+// The Fraunhofer FOKUS Public License Version 1.0 is based on, 
+// but modifies the Mozilla Public License Version 1.1.
+// See the full license text for the amendments.
 //
-// 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.
+// Software distributed under the License is distributed on an "AS IS" basis, 
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
+// for the specific language governing rights and limitations under the License.
+//
+// The Original Code is Fraunhofer FOKUS code.
+//
+// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
+// (registered association), Hansastraße 27 c, 80686 Munich, Germany.
+// All Rights Reserved.
+//
+// Contributor(s):
+//   Stefan Bund <g0dil@berlios.de>
 
 /** \file
     \brief LLSocketAddress and LLAddressingPolicy public header
 // Custom includes
 #include <sys/socket.h>
 #include <netpacket/packet.h>
-#include "../../SocketPolicy.hh"
-#include "../../FileHandle.hh"
-#include "../BSDAddressingPolicy.hh"
-#include "../BSDSocketAddress.hh"
+#include <senf/Socket/Protocols/BSDAddressingPolicy.hh>
+#include <senf/Socket/Protocols/BSDSocketAddress.hh>
 #include "MACAddress.hh"
 
 //#include "LLAddressing.mpp"
 //#include "LLAddressing.ih"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
 namespace senf {
 
     /// \addtogroup addr_group
-    /// @{
+    //\{
 
     /** \brief Link local address
 
@@ -62,7 +65,7 @@ namespace senf {
 
         /** \brief Valid pkttype() values
 
-            These are the possible values returned by pkttype() 
+            These are the possible values returned by pkttype()
          */
         enum PktType { Undefined = 0
                      , Host      = PACKET_HOST      /**< Packet destined for this host */
@@ -72,10 +75,10 @@ namespace senf {
                      , OtherHost = PACKET_OTHERHOST /**< Packet sent to another host (promisc) */
                      , Outgoing  = PACKET_OUTGOING  /**< Packet sent out from this host */
         };
-        
-        ///////////////////////////////////////////////////////////////////////////
+
+        //-////////////////////////////////////////////////////////////////////////
         ///\name Structors and default members
-        ///@{
+        //\{
 
         LLSocketAddress();              ///< Create empty address
         explicit LLSocketAddress(unsigned proto, std::string const & iface="");
@@ -84,11 +87,13 @@ namespace senf {
                                              PacketSocketHandle::bind() with.
                                              \param[in] proto Protocol (Ethertype) to listen for
                                              \param[in] iface Interface name to bind to */
-        explicit LLSocketAddress(std::string const &iface);
+        explicit LLSocketAddress(std::string const & iface);
                                         ///< Create address for \c bind()
                                         /**< This constructs an LLSocketAddress valid for calling
                                              \c PacketSocketHandle::bind() with.
-                                             \param[in] iface Interface name to bind to */
+                                             \param[in] iface Interface name to bind to
+                                             \throws UnknownInterfaceException if \a iface is not
+                                                 a valid interface name. */
 
         // This constructor is for sending packets
         explicit LLSocketAddress(MACAddress const & addr, std::string const & iface="");
@@ -97,19 +102,21 @@ namespace senf {
                                              use with \c PacketSocketHandle::sendto() on a \c
                                              SOCK_DGRAM packet socket.
                                              \param addr Address to send data to
-                                             \param iface Interface to send packet from */
+                                             \param iface Interface to send packet from
+                                             \throws UnknownInterfaceException if \a iface is not
+                                                 a valid interface name. */
 
-        LLSocketAddress(const LLSocketAddress& other);
-        LLSocketAddress& operator=(const LLSocketAddress& other);
+        LLSocketAddress(LLSocketAddress const & other);
+        LLSocketAddress& operator=(LLSocketAddress const & other);
 
-        ///@}
-        ///////////////////////////////////////////////////////////////////////////
+        //\}
+        //-////////////////////////////////////////////////////////////////////////
 
         MACAddress address() const;     ///< Return address
         std::string interface() const;  ///< Return interface name
         unsigned protocol() const;      ///< Return address protocol (ethertype)
 
-        unsigned arptype() const;       ///< Return the hatype field (ARP hardware type)
+        unsigned arptype() const;       ///< Return the arptype field (ARP hardware type)
         PktType pkttype() const;        ///< Return type of packet
 
         // The mutating interface is purposely restricted to allow only
@@ -117,6 +124,8 @@ namespace senf {
 
         void address(MACAddress const & addr); ///< Change address
         void interface(std::string const & iface); ///< Change interface
+                                                   /**< \throws UnknownInterfaceException if \a iface
+                                                             is not a valid interface name. */
         void protocol(unsigned prot);   ///< Change protocol
 
         using BSDSocketAddress::sockaddr_p;
@@ -126,10 +135,10 @@ namespace senf {
         struct ::sockaddr_ll addr_;
     };
 
-    /// @}
+    //\}
 
     /// \addtogroup policy_impl_group
-    /// @{
+    //\{
 
     /** \brief Addressing policy supporting link-local addressing
 
@@ -145,7 +154,7 @@ namespace senf {
         or peer() members.
      */
     struct LLAddressingPolicy
-        : public AddressingPolicyBase,
+        : public BSDAddressingPolicy,
           private BSDAddressingPolicyMixin<LLSocketAddress>
     {
         typedef LLSocketAddress Address;
@@ -154,7 +163,7 @@ namespace senf {
         using BSDAddressingPolicyMixin<LLSocketAddress>::bind;
     };
 
-    /// @}
+    //\}
 
     /** \brief Write link layer address
         \related LLSocketAddress
@@ -162,7 +171,7 @@ namespace senf {
     std::ostream & operator<<(std::ostream & os, LLSocketAddress const & llAddr);
 }
 
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 #include "LLAddressing.cci"
 //#include "LLAddressing.ct"
 //#include "LLAddressing.cti"