33 #include <sys/ioctl.h>        35 #if defined(__linux__)    36 #include <netpacket/packet.h>     37 #include <sys/socket.h>           41 #if defined(__APPLE__) || defined(__FreeBSD__)    42 #include <net/if_dl.h>        55 #if defined(__linux__)
    56   , m_interfaceIndex(localEndpoint.getIndex())
    73   snprintf(filter, 
sizeof(filter),
    74            "(ether proto 0x%x) && (ether dst %s) && (not ether src %s) && (not vlan)",
    86 MulticastEthernetTransport::joinMulticastGroup()
    88 #if defined(__linux__)    90   mr.mr_ifindex = m_interfaceIndex;
    91   mr.mr_type = PACKET_MR_MULTICAST;
    95   if (::setsockopt(
m_socket.native_handle(), SOL_PACKET,
    96                    PACKET_ADD_MEMBERSHIP, &mr, 
sizeof(mr)) == 0)
    99   NFD_LOG_FACE_WARN(
"setsockopt(PACKET_ADD_MEMBERSHIP) failed: " << std::strerror(errno));
   102 #if defined(SIOCADDMULTI)   104   std::strncpy(ifr.ifr_name, 
m_interfaceName.data(), 
sizeof(ifr.ifr_name) - 1);
   106 #if defined(__APPLE__) || defined(__FreeBSD__)   108   using boost::asio::ip::udp;
   110   int fd = sock.native_handle();
   123   sockaddr_dl* sdl = 
reinterpret_cast<sockaddr_dl*
>(&ifr.ifr_addr);
   124   sdl->sdl_len = 
sizeof(ifr.ifr_addr);
   125   sdl->sdl_family = AF_LINK;
   129   static_assert(
sizeof(ifr.ifr_addr) >= offsetof(sockaddr_dl, sdl_data) + 
ethernet::ADDR_LEN,
   130                 "ifr_addr in struct ifreq is too small on this platform");
   134   ifr.ifr_hwaddr.sa_family = AF_UNSPEC;
   138                 "ifr_hwaddr in struct ifreq is too small on this platform");
   141   if (::ioctl(fd, SIOCADDMULTI, &ifr) == 0)
   147   BOOST_THROW_EXCEPTION(
Error(
"Failed to join multicast group"));
 void setPersistency(ndn::nfd::FacePersistency newPersistency)
changes face persistency setting 
 
void setPacketFilter(const char *filter) const 
Install a BPF filter on the receiving socket. 
 
uint32_t getMtu() const 
Returns the MTU (maximum transmission unit) of the interface. 
 
void setRemoteUri(const FaceUri &uri)
 
const size_t ADDR_LEN
Octets in one Ethernet address. 
 
bool isBroadcast() const 
True if this is a broadcast address (ff:ff:ff:ff:ff:ff) 
 
detail::SimulatorIo & getGlobalIoService()
 
void setLinkType(ndn::nfd::LinkType linkType)
 
void setScope(ndn::nfd::FaceScope scope)
 
Represents one network interface attached to the host. 
 
#define NFD_LOG_FACE_INFO(msg)
Log a message at INFO level. 
 
Copyright (c) 2011-2015 Regents of the University of California. 
 
MulticastEthernetTransport(const ndn::net::NetworkInterface &localEndpoint, const ethernet::Address &mcastAddress, ndn::nfd::LinkType linkType)
Creates an Ethernet-based transport for multicast communication. 
 
boost::asio::posix::stream_descriptor m_socket
 
ethernet::Address m_destAddress
 
void setLocalUri(const FaceUri &uri)
 
bool isMulticast() const 
True if this is a multicast address. 
 
std::string toString(char sep= ':') const 
Converts the address to a human-readable string. 
 
const uint16_t ETHERTYPE_NDN
 
represents the underlying protocol and address used by a Face 
 
represents an Ethernet hardware address 
 
Base class for Ethernet-based Transports. 
 
Catch-all error for socket component errors that don't fit in other categories. 
 
#define NFD_LOG_INIT(name)
 
std::string m_interfaceName
 
static FaceUri fromDev(const std::string &ifname)
create dev FaceUri from network device name 
 
ethernet::Address m_srcAddress
 
#define NFD_LOG_FACE_WARN(msg)
Log a message at WARN level.