class-modules.h revision d84430702496f617c01c5e2d27d0e82e02390bb7
144d362409d5469aed47d19e7908d19bd194493aThomas Graf/* 244d362409d5469aed47d19e7908d19bd194493aThomas Graf * netlink/route/class-modules.h Class Module API 344d362409d5469aed47d19e7908d19bd194493aThomas Graf * 444d362409d5469aed47d19e7908d19bd194493aThomas Graf * This library is free software; you can redistribute it and/or 544d362409d5469aed47d19e7908d19bd194493aThomas Graf * modify it under the terms of the GNU Lesser General Public 644d362409d5469aed47d19e7908d19bd194493aThomas Graf * License as published by the Free Software Foundation version 2.1 744d362409d5469aed47d19e7908d19bd194493aThomas Graf * of the License. 844d362409d5469aed47d19e7908d19bd194493aThomas Graf * 944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch> 1044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 1144d362409d5469aed47d19e7908d19bd194493aThomas Graf 1244d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef NETLINK_CLASS_MODULES_H_ 1344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NETLINK_CLASS_MODULES_H_ 1444d362409d5469aed47d19e7908d19bd194493aThomas Graf 1544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/netlink.h> 1644d362409d5469aed47d19e7908d19bd194493aThomas Graf 1744d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifdef __cplusplus 1844d362409d5469aed47d19e7908d19bd194493aThomas Grafextern "C" { 1944d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif 2044d362409d5469aed47d19e7908d19bd194493aThomas Graf 2144d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 2244d362409d5469aed47d19e7908d19bd194493aThomas Graf * Class operations 2344d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup class_api 2444d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 2544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_class_ops 2644d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 2744d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 2844d362409d5469aed47d19e7908d19bd194493aThomas Graf * Kind/Name of class 2944d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 3044d362409d5469aed47d19e7908d19bd194493aThomas Graf char co_kind[32]; 3144d362409d5469aed47d19e7908d19bd194493aThomas Graf 3244d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 3344d362409d5469aed47d19e7908d19bd194493aThomas Graf * Dump callbacks 3444d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 35d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf void (*co_dump[NL_DUMP_MAX+1])(struct rtnl_class *, 36d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf struct nl_dump_params *); 3744d362409d5469aed47d19e7908d19bd194493aThomas Graf 3844d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 3944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Must return the contents supposed to be in TCA_OPTIONS 4044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 4144d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_msg *(*co_get_opts)(struct rtnl_class *); 4244d362409d5469aed47d19e7908d19bd194493aThomas Graf 4344d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 4444d362409d5469aed47d19e7908d19bd194493aThomas Graf * TCA_OPTIONS message parser 4544d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 4644d362409d5469aed47d19e7908d19bd194493aThomas Graf int (*co_msg_parser)(struct rtnl_class *); 4744d362409d5469aed47d19e7908d19bd194493aThomas Graf 4844d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 4944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Called before a class object gets destroyed 5044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 5144d362409d5469aed47d19e7908d19bd194493aThomas Graf void (*co_free_data)(struct rtnl_class *); 5244d362409d5469aed47d19e7908d19bd194493aThomas Graf 5344d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 5444d362409d5469aed47d19e7908d19bd194493aThomas Graf * Called whenever a class object needs to be cloned 5544d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 5644d362409d5469aed47d19e7908d19bd194493aThomas Graf int (*co_clone)(struct rtnl_class *, struct rtnl_class *); 5744d362409d5469aed47d19e7908d19bd194493aThomas Graf 5844d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 5944d362409d5469aed47d19e7908d19bd194493aThomas Graf * INTERNAL (Do not use) 6044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 6144d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_class_ops *co_next; 6244d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 6344d362409d5469aed47d19e7908d19bd194493aThomas Graf 6444d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int rtnl_class_register(struct rtnl_class_ops *); 6544d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int rtnl_class_unregister(struct rtnl_class_ops *); 6644d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct rtnl_class_ops * rtnl_class_lookup_ops(struct rtnl_class *); 6744d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct rtnl_class_ops * __rtnl_class_lookup_ops(const char *); 6844d362409d5469aed47d19e7908d19bd194493aThomas Graf 6944d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifdef __cplusplus 7044d362409d5469aed47d19e7908d19bd194493aThomas Graf} 7144d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif 7244d362409d5469aed47d19e7908d19bd194493aThomas Graf 7344d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif 74