00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CONEXUS_LLLL_ADDRESS_H
00020 #define CONEXUS_LLLL_ADDRESS_H
00021
00022 #include <netpacket/packet.h>
00023 #include <net/ethernet.h>
00024
00025 #include <vector>
00026 #include <string>
00027
00028 #include <conexus/address.h>
00029 #include <conexus/utility.h>
00030
00031 namespace Conexus
00032 {
00033
00040 namespace LL
00041 {
00042
00057 class Address : public Conexus::Address
00058 {
00059 public:
00060 Address(unsigned short protocol=ETH_P_IP);
00061
00062 virtual ~Address();
00063
00064 unsigned short family() const;
00065
00066 unsigned short protocol() const;
00067 void set_protocol(unsigned short);
00068
00069 int interface_index() const;
00070 unsigned short hardware_type() const;
00071 unsigned char packet_type() const;
00072 unsigned char hardware_address_length() const;
00073 const unsigned char* hardware_address() const;
00074
00075 virtual socklen_t sockaddr_size() const;
00076 virtual bool is_broadcast() const;
00077
00078 void set_interface(int);
00079 void set_interface(const std::string);
00080
00081 friend class Packet;
00082
00083 virtual const std::string& object_type() { static std::string s("Conexus::LL::Address"); return s; }
00084
00085 protected:
00086 struct sockaddr_ll* m_sockaddr_ll;
00087 };
00088
00089 }
00090
00091 }
00092
00093 #endif