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