These two patches add a Generic Netlink interface to IPVS while keeping the old get/setsockopt interface for userspace backwards compatibility. The motivation for this is to have a more extensible interface for future changes, such as the planned IPv6 support. ipvsadm is currently being extended to support the new interface and features. The ip_vs.h header change depends on this patch I sent yesterday: "IPVS: Move userspace definitions to include/linux/ip_vs.h" Below is an overview over the attribute types and message formats used in this interface. The Netlink interface follows the old interface closely, so the commands and the received / returned data are almost the same: ====================================== | IPVS NETLINK ATTRIBUTE TYPES | | (enums grouped by empty lines) | ====================================== IPVS_ENTRY_ATTR_SERVICE - NLA_NESTED IPVS_ENTRY_ATTR_DEST - NLA_NESTED IPVS_ENTRY_ATTR_DAEMON - NLA_NESTED IPVS_SVC_ATTR_AF - NLA_U16 IPVS_SVC_ATTR_PROTOCOL - NLA_U16 IPVS_SVC_ATTR_ADDR - NLA_BINARY IPVS_SVC_ATTR_PORT - NLA_U16 IPVS_SVC_ATTR_FWMARK - NLA_U32 IPVS_SVC_ATTR_SCHED_NAME - NLA_NUL_STRING IPVS_SVC_ATTR_FLAGS - NLA_BINARY IPVS_SVC_ATTR_TIMEOUT - NLA_U32 IPVS_SVC_ATTR_NETMASK - NLA_U32 IPVS_SVC_ATTR_STATS - NLA_NESTED IPVS_DEST_ATTR_ADDR - NLA_BINARY IPVS_DEST_ATTR_PORT - NLA_U16 IPVS_DEST_ATTR_FWD_METHOD - NLA_U32 IPVS_DEST_ATTR_WEIGHT - NLA_U32 IPVS_DEST_ATTR_U_THRESH - NLA_U32 IPVS_DEST_ATTR_L_THRESH - NLA_U32 IPVS_DEST_ATTR_ACTIVE_CONNS - NLA_U32 IPVS_DEST_ATTR_INACT_CONNS - NLA_U32 IPVS_DEST_ATTR_PERSIST_CONNS - NLA_U32 IPVS_DEST_ATTR_STATS - NLA_NESTED IPVS_STATS_ATTR_CONNS - NLA_U32 IPVS_STATS_ATTR_INPKTS - NLA_U32 IPVS_STATS_ATTR_OUTPKTS - NLA_U32 IPVS_STATS_ATTR_INBYTES - NLA_U64 IPVS_STATS_ATTR_OUTBYTES - NLA_U64 IPVS_STATS_ATTR_CPS - NLA_U32 IPVS_STATS_ATTR_INPPS - NLA_U32 IPVS_STATS_ATTR_OUTPPS - NLA_U32 IPVS_STATS_ATTR_INBPS - NLA_U32 IPVS_STATS_ATTR_OUTBPS - NLA_U32 IPVS_TIMEOUT_ATTR_TCP - NLA_U32 IPVS_TIMEOUT_ATTR_TCP_FIN - NLA_U32 IPVS_TIMEOUT_ATTR_UDP - NLA_U32 IPVS_DAEMON_ATTR_STATE - NLA_U32 IPVS_DAEMON_ATTR_MCAST_IFN - NLA_NUL_STRING IPVS_DAEMON_ATTR_SYNC_ID - NLA_U32 IPVS_INFO_ATTR_VERSION - NLA_U32 IPVS_INFO_ATTR_CONN_TAB_SIZE - NLA_U32 ========================== | COMMAND MESSAGES | ========================== IPVS_CMD_ADD_SERVICE IPVS_ENTRY_ATTR_SERVICE IPVS_SVC_ATTR_AF (IPVS_SVC_ATTR_PROTOCOL IPVS_SVC_ATTR_ADDR IPVS_SVC_ATTR_PORT) or IPVS_SVC_ATTR_FWMARK IPVS_SVC_ATTR_SCHED_NAME IPVS_SVC_ATTR_FLAGS IPVS_SVC_ATTR_TIMEOUT IPVS_SVC_ATTR_NETMASK IPVS_CMD_EDIT_SERVICE IPVS_ENTRY_ATTR_SERVICE IPVS_SVC_ATTR_AF (IPVS_SVC_ATTR_PROTOCOL IPVS_SVC_ATTR_ADDR IPVS_SVC_ATTR_PORT) or IPVS_SVC_ATTR_FWMARK IPVS_SVC_ATTR_SCHED_NAME IPVS_SVC_ATTR_FLAGS IPVS_SVC_ATTR_TIMEOUT IPVS_SVC_ATTR_NETMASK IPVS_CMD_DEL_SERVICE IPVS_ENTRY_ATTR_SERVICE IPVS_SVC_ATTR_AF (IPVS_SVC_ATTR_PROTOCOL IPVS_SVC_ATTR_ADDR IPVS_SVC_ATTR_PORT) or IPVS_SVC_ATTR_FWMARK IPVS_CMD_ADD_DEST IPVS_ENTRY_ATTR_SERVICE IPVS_SVC_ATTR_AF (IPVS_SVC_ATTR_PROTOCOL IPVS_SVC_ATTR_ADDR IPVS_SVC_ATTR_PORT) or IPVS_SVC_ATTR_FWMARK IPVS_ENTRY_ATTR_DEST IPVS_DEST_ATTR_ADDR IPVS_DEST_ATTR_PORT IPVS_DEST_ATTR_FWD_METHOD IPVS_DEST_ATTR_WEIGHT IPVS_DEST_ATTR_U_THRESH IPVS_DEST_ATTR_L_THRESH IPVS_CMD_EDIT_DEST IPVS_ENTRY_ATTR_SERVICE IPVS_SVC_ATTR_AF (IPVS_SVC_ATTR_PROTOCOL IPVS_SVC_ATTR_ADDR IPVS_SVC_ATTR_PORT) or IPVS_SVC_ATTR_FWMARK IPVS_ENTRY_ATTR_DEST IPVS_DEST_ATTR_ADDR IPVS_DEST_ATTR_PORT IPVS_DEST_ATTR_FWD_METHOD IPVS_DEST_ATTR_WEIGHT IPVS_DEST_ATTR_U_THRESH IPVS_DEST_ATTR_L_THRESH IPVS_CMD_DEL_DEST IPVS_ENTRY_ATTR_SERVICE IPVS_SVC_ATTR_AF (IPVS_SVC_ATTR_PROTOCOL IPVS_SVC_ATTR_ADDR IPVS_SVC_ATTR_PORT) or IPVS_SVC_ATTR_FWMARK IPVS_ENTRY_ATTR_DEST IPVS_DEST_ATTR_ADDR IPVS_DEST_ATTR_PORT IPVS_CMD_FLUSH (no arguments) IPVS_CMD_SET_TIMEOUT IPVS_TIMEOUT_ATTR_TCP IPVS_TIMEOUT_ATTR_TCP_FIN IPVS_TIMEOUT_ATTR_UDP IPVS_CMD_START_DAEMON IPVS_ENTRY_ATTR_DAEMON IPVS_DAEMON_ATTR_STATE IPVS_DAEMON_ATTR_MCAST_IFN IPVS_DAEMON_ATTR_SYNC_ID IPVS_CMD_STOP_DAEMON IPVS_ENTRY_ATTR_DAEMON IPVS_DAEMON_ATTR_STATE IPVS_CMD_ZERO IPVS_ENTRY_ATTR_SERVICE IPVS_SVC_ATTR_AF (IPVS_SVC_ATTR_PROTOCOL IPVS_SVC_ATTR_ADDR IPVS_SVC_ATTR_PORT) or IPVS_SVC_ATTR_FWMARK IPVS_CMD_GET_INFO (no arguments) IPVS_CMD_GET_SERVICES (no arguments) IPVS_CMD_GET_SERVICE IPVS_ENTRY_ATTR_SERVICE IPVS_SVC_ATTR_AF (IPVS_SVC_ATTR_PROTOCOL IPVS_SVC_ATTR_ADDR IPVS_SVC_ATTR_PORT) or IPVS_SVC_ATTR_FWMARK IPVS_CMD_GET_DESTS IPVS_ENTRY_ATTR_SERVICE IPVS_SVC_ATTR_AF (IPVS_SVC_ATTR_PROTOCOL IPVS_SVC_ATTR_ADDR IPVS_SVC_ATTR_PORT) or IPVS_SVC_ATTR_FWMARK IPVS_CMD_GET_TIMEOUT (no arguments) IPVS_CMD_GET_DAEMON (no arguments) ========================= | COMMAND REPLIES | ========================= IPVS_CMD_ADD_SERVICE (only return code) IPVS_CMD_DEL_SERVICE (only return code) IPVS_CMD_ADD_DEST (only return code) IPVS_CMD_DEL_DEST (only return code) IPVS_CMD_FLUSH (only return code) IPVS_CMD_SET_TIMEOUT (only return code) IPVS_CMD_START_DAEMON (only return code) IPVS_CMD_STOP_DAEMON (only return code) IPVS_CMD_ZERO (only return code) IPVS_CMD_GET_INFO IPVS_INFO_ATTR_VERSION IPVS_INFO_ATTR_CONNTAB_SIZE IPVS_CMD_GET_SERVICES IPVS_ENTRY_ATTR_SERVICE (one entry per multipart message) IPVS_SVC_ATTR_AF (IPVS_SVC_ATTR_PROTOCOL IPVS_SVC_ATTR_ADDR IPVS_SVC_ATTR_PORT) or IPVS_SVC_ATTR_FWMARK IPVS_SVC_ATTR_SCHED_NAME IPVS_SVC_ATTR_FLAGS IPVS_SVC_ATTR_TIMEOUT IPVS_SVC_ATTR_NETMASK IPVS_SVC_ATTR_STATS IPVS_CMD_GET_SERVICE IPVS_ENTRY_ATTR_SERVICE IPVS_SVC_ATTR_AF (IPVS_SVC_ATTR_PROTOCOL IPVS_SVC_ATTR_ADDR IPVS_SVC_ATTR_PORT) or IPVS_SVC_ATTR_FWMARK IPVS_SVC_ATTR_SCHED_NAME IPVS_SVC_ATTR_FLAGS IPVS_SVC_ATTR_TIMEOUT IPVS_SVC_ATTR_NETMASK IPVS_SVC_ATTR_STATS IPVS_CMD_GET_DESTS IPVS_ENTRY_ATTR_DEST (one entry per multipart message) IPVS_DEST_ATTR_ADDR IPVS_DEST_ATTR_PORT IPVS_DEST_ATTR_FWD_METHOD IPVS_DEST_ATTR_WEIGHT IPVS_DEST_ATTR_U_THRESH IPVS_DEST_ATTR_L_THRESH IPVS_DEST_ATTR_ACTIVE_CONNS IPVS_DEST_ATTR_INACT_CONNS IPVS_DEST_ATTR_PERSIST_CONNS IPVS_DEST_ATTR_STATS IPVS_CMD_GET_TIMEOUT IPVS_TIMEOUT_ATTR_TCP IPVS_TIMEOUT_ATTR_TCP_FIN IPVS_TIMEOUT_ATTR_UDP IPVS_CMD_GET_DAEMON IPVS_ENTRY_ATTR_DAEMON (one entry per multipart message) IPVS_DAEMON_ATTR_STATE IPVS_DAEMON_ATTR_MCAST_IFN IPVS_DAEMON_ATTR_SYNC_ID -- To unsubscribe from this list: send the line "unsubscribe lvs-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html