Libmac – A C library to facilitate wireless experimental research. Kishore Ramachandran Wireless Information Networks Laboratory Rutgers, The State University of New Jersey
Overview. Software tools required for the ORBIT emulator to create topologies, conduct experiments and store information.
Overview. While creating topologies and storing results, User is involvement is limited, specify source of input (topology and experiment information) and output (where and how to store results) One-time setup.
Motivation. While conducting experiments, User choices include: use public-domain implementation modules and/or write code and integrate with emulator, repeating the operating model of ns-2 and OPNET.
Design Goals. Design a software development framework which will provide the development ease and flexibility of a simulator, provide more accurate results than those currently obtained and serve as common ground where results can be compared.
Design Choices. 1. Implement the framework in user-space, in a modular manner. 2. Use publicly available source code in order to speed up implementation. Using public-domain frame injection (libnet) and capture libraries (libpcap). 3. Implement all modules in the framework as shared libraries that provide APIs.
Protocols, in user space, as plug-and- play modules. User space MPDUs & params exchanged TPM APM NPDUs & params exchanged Device drivers TPDUs & params exchanged Plug-and-play protocol modules (PM) at each layer NPM MACPM Kernel space
Libmac feature list. 1. Ethernet frame injection and capture. 2. Manipulation of a subset of wireless interface parameters. 3. Communication of a subset of wireless interface parameters frame capture and injection (coming shortly).
Libmac API specification (v0.3.0). Ethernet frame injection and capture. Library initialization. int mac_get_ifinfo (struct mac_ifinfo **mac_ptr); int mac_free_ifinfo (struct mac_ifinfo **mac_ptr); Send and receive functions. int mac_send_broadcast(u_char *payload, short len, struct mac_ifinfo_list *q); int mac_send_unicast(u_char *payload, short len, struct mac_ifinfo_list *q, unsigned char *ucast_mac); int mac_recv (struct ether_header **header, char **payload, unsigned short *len, unsigned char **send_params, unsigned char **recv_params, struct mac_ifinfo_list *q, char *filter);
Libmac API specification (v0.3.0). Manipulation of a subset of wireless interface parameters. int mac_get_params (struct mac_params *h, struct mac_ifinfo_list *if_ptr, int argc,...); int mac_set_params (struct mac_params *h, struct mac_ifinfo_list *if_ptr, int argc,...); Communication of a subset of wireless interface parameters. int mac_append_params (struct mac_ifinfo_list *if_ptr, unsigned char direction, int argc,...);
Libmac API specification (v0.3.0) frame capture. int mac_promisc_recv(unsigned char **frame, unsigned short *frame_len, unsigned char **send_params, unsigned char **recv_params, struct mac_ifinfo_list *q); frame injection in next release. Complete documentation available with the library, includes tutorial and examples. (