144d362409d5469aed47d19e7908d19bd194493aThomas Graf/*
244d362409d5469aed47d19e7908d19bd194493aThomas Graf * lib/route/cls/police.c	Policer
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#include <netlink-local.h>
1344d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink-tc.h>
1444d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/netlink.h>
1544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/utils.h>
1644d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/route/tc.h>
1744d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/route/classifier.h>
1844d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/route/classifier-modules.h>
1944d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/route/cls/police.h>
2044d362409d5469aed47d19e7908d19bd194493aThomas Graf
2144d362409d5469aed47d19e7908d19bd194493aThomas Graf/**
2244d362409d5469aed47d19e7908d19bd194493aThomas Graf * @name Policer Type
2344d362409d5469aed47d19e7908d19bd194493aThomas Graf * @{
2444d362409d5469aed47d19e7908d19bd194493aThomas Graf */
2544d362409d5469aed47d19e7908d19bd194493aThomas Graf
2644d362409d5469aed47d19e7908d19bd194493aThomas Grafstatic struct trans_tbl police_types[] = {
2744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__ADD(TC_POLICE_UNSPEC,unspec)
2844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__ADD(TC_POLICE_OK,ok)
2944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__ADD(TC_POLICE_RECLASSIFY,reclassify)
3044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__ADD(TC_POLICE_SHOT,shot)
3144d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifdef TC_POLICE_PIPE
3244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__ADD(TC_POLICE_PIPE,pipe)
3344d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
3444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
3544d362409d5469aed47d19e7908d19bd194493aThomas Graf
3644d362409d5469aed47d19e7908d19bd194493aThomas Graf/**
3744d362409d5469aed47d19e7908d19bd194493aThomas Graf * Transform a policer type number into a character string (Reentrant).
3844d362409d5469aed47d19e7908d19bd194493aThomas Graf * @arg type		policer type
3944d362409d5469aed47d19e7908d19bd194493aThomas Graf * @arg buf		destination buffer
4044d362409d5469aed47d19e7908d19bd194493aThomas Graf * @arg len		buffer length
4144d362409d5469aed47d19e7908d19bd194493aThomas Graf *
4244d362409d5469aed47d19e7908d19bd194493aThomas Graf * Transforms a policer type number into a character string and stores
4344d362409d5469aed47d19e7908d19bd194493aThomas Graf * it in the provided buffer.
4444d362409d5469aed47d19e7908d19bd194493aThomas Graf *
4544d362409d5469aed47d19e7908d19bd194493aThomas Graf * @return The destination buffer or the type encoded in hex if no match was found.
4644d362409d5469aed47d19e7908d19bd194493aThomas Graf */
4744d362409d5469aed47d19e7908d19bd194493aThomas Grafchar * nl_police2str(int type, char *buf, size_t len)
4844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
4944d362409d5469aed47d19e7908d19bd194493aThomas Graf	return __type2str(type, buf, len, police_types,
5044d362409d5469aed47d19e7908d19bd194493aThomas Graf			  ARRAY_SIZE(police_types));
5144d362409d5469aed47d19e7908d19bd194493aThomas Graf}
5244d362409d5469aed47d19e7908d19bd194493aThomas Graf
5344d362409d5469aed47d19e7908d19bd194493aThomas Graf/**
5444d362409d5469aed47d19e7908d19bd194493aThomas Graf * Transform a character string into a policer type number
5544d362409d5469aed47d19e7908d19bd194493aThomas Graf * @arg name		policer type name
5644d362409d5469aed47d19e7908d19bd194493aThomas Graf *
5744d362409d5469aed47d19e7908d19bd194493aThomas Graf * Transform the provided character string specifying a policer
5844d362409d5469aed47d19e7908d19bd194493aThomas Graf * type into the corresponding numeric value
5944d362409d5469aed47d19e7908d19bd194493aThomas Graf *
6044d362409d5469aed47d19e7908d19bd194493aThomas Graf * @return Policer type number or a negative value.
6144d362409d5469aed47d19e7908d19bd194493aThomas Graf */
6244d362409d5469aed47d19e7908d19bd194493aThomas Grafint nl_str2police(const char *name)
6344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
6444d362409d5469aed47d19e7908d19bd194493aThomas Graf	return __str2type(name, police_types, ARRAY_SIZE(police_types));
6544d362409d5469aed47d19e7908d19bd194493aThomas Graf}
6644d362409d5469aed47d19e7908d19bd194493aThomas Graf
6744d362409d5469aed47d19e7908d19bd194493aThomas Graf/** @} */
68