3.2.1 InterfaceAddrRequest

 On Netlink++ application you simply include OZ++ netlink class header files as your needs, as shown below. You also have to write your own main function of the C/C++ program entry point.
The following InterfaceAddrRequest class is an example to send a NetlinkRequest for the structure ifaddrmsg to get IPv4 interface addresses.
1. Define your own netlink request C++ class.
2. Add a member variable of NetlinkRequest<T> which includes a netlink message header and a requst body of type T.
3. Add a member variable of SocketNetlink which can be used as a communication channel to the kernel.
4. Define a contructor to initialize the above two member variables.
5. Define a send method to send your netlink request to the kernel through the SocketNetlink.
6. Define a recv method to receive a reply from the kernel through the SocketNetlink.
7. In main function, create an instance of your request class, and call the send and recv mothods for the instance.

//Copyright (c) 2014 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.

#include <oz++/CommonObject.h>
#include <oz++/Locale.h>
#include <oz++/Exception.h>

#include <oz++/netlink/SocketNetlink.h>
#include <oz++/netlink/SockAddrNetlink.h>
#include <oz++/netlink/InterfaceAddrAttribute.h>
#include <oz++/netlink/NetlinkMsgHeader.h>
#include <oz++/netlink/InterfaceAddrMsg.h>
#include <oz++/netlink/NetlinkRequest.h>

namespace OZ {
class InterfaceAddrRequest :public CommonObject {
  NetlinkRequest<ifaddrmsg> request;
  SocketNetlink socketNetlink;

  InterfaceAddrRequest(unsigned char family)
    NetlinkMsgHeader header(&request.head);

    InterfaceAddrMsg body(&request.body);

    header.length( NLMSG_LENGTH(body.size()) );
  int send()
    return socketNetlink.send((const char*)&request, sizeof(request), 0);   
  void recv()
    while (true) {
      char buffer[4096];
      bzero(buffer, sizeof(buffer));
      int n = socketNetlink.recv(buffer, sizeof(buffer), 0);
      if (n < 0){
      NetlinkMsgHeader netlinkMsgHeader(buffer, n);
      if (netlinkMsgHeader.isDone() || netlinkMsgHeader.isError()) {
      try {
        do {
          InterfaceAddrMsg addrMsg(netlinkMsgHeader.data());

          InterfaceAddrAttribute attr(netlinkMsgHeader, addrMsg);
          do {
          } while (attr.next() );


        } while (netlinkMsgHeader.next());
      } catch (Exception& ex) {
    } //while

int main(int argc, char* argv[])
  Locale locale;
  try {
    InterfaceAddrRequest inetRequest(AF_INET);
    InterfaceAddrRequest inet6Request(AF_INET6);
  } catch (Exception& ex) {
  return 0;

Last modified: 29 Aug 2016

 Last modified: 29 Aug2016

Copyright (c) 2000-2016 Antillia.com ALL RIGHTS RESERVED.