.deps
.libs
.dirstamp
-*.in
*.la
*.lo
*.o
*.swp
Makefile
+Makefile.in
+defs.h.in
+defs.h.in~
/lib/stamp-h1
/libnl-1.pc
/ltmain.sh
/install-sh
/missing
-
/*.pc
+
SUBDIRS = include lib doc man $(OPT_DIRS)
-pkgconfig_DATA = libnl-3.0.pc
+pkgconfig_DATA = libnl-3.1.pc \
+ libnl-route-3.1.pc \
+ libnl-genl-3.1.pc \
+ libnl-nf-3.1.pc
sysconfdir = @sysconfdir@/libnl
sysconf_DATA = etc/pktloc etc/classid
# Copyright (c) 2003-2011 Thomas Graf <tgraf@suug.ch>
#
-AC_INIT(libnl, 3.0, tgraf@suug.ch)
+AC_INIT(libnl, 3.1, tgraf@suug.ch)
AC_CONFIG_HEADERS([lib/defs.h])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([-Wall foreign subdir-objects])
MAJ_VERSION=3
AC_SUBST([MAJ_VERSION])
-MIN_VERSION=0
+MIN_VERSION=1
AC_SUBST([MIN_VERSION])
AC_PROG_CC
AC_CONFIG_FILES([Makefile doc/Doxyfile doc/Makefile lib/Makefile
include/Makefile src/Makefile src/lib/Makefile man/Makefile
- libnl-3.0.pc include/netlink/version.h])
+ libnl-3.1.pc libnl-route-3.1.pc libnl-genl-3.1.pc libnl-nf-3.1.pc
+ include/netlink/version.h])
AC_OUTPUT
Netlink Library (libnl)
=======================
Thomas Graf <tgraf@suug.ch>
-3.0, July 17 2011:
+3.1, Aug 11 2011:
:numbered:
== Introduction
-----
#include <netlink/version.h>
-#if LIBNL_VER_NUM >= LIBNL_VER(3,0)
- /* include code if compiled with libnl version >= 3.0 */
+#if LIBNL_VER_NUM >= LIBNL_VER(3,1)
+ /* include code if compiled with libnl version >= 3.1 */
#endif
-----
Currently the following address families are supported:
- - `AF_INET`
- - `AF_INET6`
- - `AF_LLC`
- - `AF_DECnet`
- - `AF_UNSPEC`
+[options="compact"]
+ * `AF_INET`
+ * `AF_INET6`
+ * `AF_LLC`
+ * `AF_DECnet`
+ * `AF_UNSPEC`
[[core_addr_alloc]]
.Address Allocation
Routing Family Netlink Library (libnl-route)
============================================
Thomas Graf <tgraf@suug.ch>
-3.1, July 17 2011:
+3.1, Aug 11 2011:
== Introduction
# -*- Makefile -*-
AM_CPPFLAGS = -Wall -I${top_srcdir}/include -I${top_builddir}/include -I${builddir}/route -I${builddir}/route/cls -D_GNU_SOURCE -DSYSCONFDIR=\"$(sysconfdir)/libnl\"
-AM_LDFLAGS = -version-info 3:0:0
+AM_LDFLAGS = -version-info 3:1:0
lib_LTLIBRARIES = \
libnl.la libnl-genl.la libnl-route.la libnl-nf.la
--- /dev/null
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libnl-genl
+Description: Generic Netlink Library
+Version: @PACKAGE_VERSION@
+Requires: libnl
+Libs: -L${libdir} -lnl-genl
+Cflags: -I${includedir}
--- /dev/null
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libnl-nf
+Description: Netfilter Netlink Library
+Version: @PACKAGE_VERSION@
+Requires: libnl
+Libs: -L${libdir} -lnl-nf
+Cflags: -I${includedir}
--- /dev/null
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libnl-route
+Description: Netlink Routing Family Library
+Version: @PACKAGE_VERSION@
+Requires: libnl
+Libs: -L${libdir} -lnl-route
+Cflags: -I${includedir}
void nl_cli_link_parse_weight(struct rtnl_link *link, char *arg)
{
- uint32_t weight = nl_cli_parse_u32(arg);
- rtnl_link_set_weight(link, weight);
}
void nl_cli_link_parse_ifalias(struct rtnl_link *link, char *arg)
include ../Makefile.opts
endif
-LDFLAGS += -L../lib -lnl ../src/utils.o
+LDFLAGS += -L../lib -lnl -lnl-genl -lnl-route
CIN := $(wildcard test-*.c)
-TOOLS := $(CIN:%.c=%)
+TESTS := $(CIN:%.c=%)
-all: $(TOOLS)
-
-$(TOOLS): ../src/utils.o
+all: $(TESTS)
test-%: test-%.c
@echo " LD $@"; \
- $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) -lnl-genl -lnl-route
+ $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
clean:
@echo " CLEAN src"; \
- rm -f $(TOOLS)
+ rm -f $(TESTS)
distclean: clean
install:
@true
-
-include ../Makefile.rules
--- /dev/null
+#include <netlink/netlink.h>
+#include <netlink/route/link.h>
+
+int main(int argc, char *argv[])
+{
+ struct rtnl_link *link;
+ struct nl_sock *sk;
+ int err;
+
+ sk = nl_socket_alloc();
+ if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) {
+ nl_perror(err, "Unable to connect socket");
+ return err;
+ }
+
+ link = rtnl_link_alloc();
+ rtnl_link_set_name(link, "my_bond");
+
+ if ((err = rtnl_link_set_info_type(link, "bond")) < 0) {
+ nl_perror(err, "Unable to set link info type");
+ return err;
+ }
+
+ if ((err = rtnl_link_add(sk, link, NLM_F_CREATE)) < 0) {
+ nl_perror(err, "Unable to add link");
+ return err;
+ }
+
+ rtnl_link_put(link);
+ nl_close(sk);
+
+ return 0;
+}
--- /dev/null
+#include <netlink/netlink.h>
+#include <netlink/route/link.h>
+#include <netlink/route/link/vlan.h>
+
+int main(int argc, char *argv[])
+{
+ struct rtnl_link *link;
+ struct nl_cache *link_cache;
+ struct nl_sock *sk;
+ int err, master_index;
+
+ sk = nl_socket_alloc();
+ if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) {
+ nl_perror(err, "Unable to connect socket");
+ return err;
+ }
+
+ if ((err = rtnl_link_alloc_cache(sk, AF_UNSPEC, &link_cache)) < 0) {
+ nl_perror(err, "Unable to allocate cache");
+ return err;
+ }
+
+ if (!(master_index = rtnl_link_name2i(link_cache, "eth0"))) {
+ fprintf(stderr, "Unable to lookup eth0");
+ return -1;
+ }
+
+ link = rtnl_link_alloc();
+
+ rtnl_link_set_link(link, master_index);
+
+ if ((err = rtnl_link_set_type(link, "vlan")) < 0) {
+ nl_perror(err, "Unable to set link info type");
+ return err;
+ }
+
+ rtnl_link_vlan_set_id(link, 10);
+
+ if ((err = rtnl_link_add(sk, link, NLM_F_CREATE)) < 0) {
+ nl_perror(err, "Unable to add link");
+ return err;
+ }
+
+ rtnl_link_put(link);
+ nl_close(sk);
+
+ return 0;
+}
--- /dev/null
+#include <netlink/netlink.h>
+#include <netlink/route/link.h>
+
+int main(int argc, char *argv[])
+{
+ struct rtnl_link *link;
+ struct nl_sock *sk;
+ int err;
+
+ sk = nl_socket_alloc();
+ if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) {
+ nl_perror(err, "Unable to connect socket");
+ return err;
+ }
+
+ link = rtnl_link_alloc();
+ rtnl_link_set_name(link, "my_bond");
+
+ if ((err = rtnl_link_delete(sk, link)) < 0) {
+ nl_perror(err, "Unable to delete link");
+ return err;
+ }
+
+ rtnl_link_put(link);
+ nl_close(sk);
+
+ return 0;
+}