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