17e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger/* 2ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger * m_pedit.h generic packet editor actions module 37e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger * 47e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger * This program is free software; you can distribute it and/or 57e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger * modify it under the terms of the GNU General Public License 67e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger * as published by the Free Software Foundation; either version 77e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger * 2 of the License, or (at your option) any later version. 87e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger * 9ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger * Authors: J Hadi Salim (hadi@cyberus.ca) 10ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger * 117e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger */ 127e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 137e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#ifndef _ACT_PEDIT_H_ 147e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#define _ACT_PEDIT_H_ 1 157e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 167e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <stdio.h> 177e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <stdlib.h> 187e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <unistd.h> 197e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <syslog.h> 207e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <fcntl.h> 217e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <sys/socket.h> 227e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <netinet/in.h> 237e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <arpa/inet.h> 247e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <string.h> 257e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include "utils.h" 267e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include "tc_util.h" 277e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <linux/tc_act/tc_pedit.h> 287e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 297e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#define MAX_OFFS 128 307e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 317e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#define TIPV4 1 327e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#define TIPV6 2 337e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#define TINT 3 347e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#define TU32 4 357e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 367e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#define RU32 0xFFFFFFFF 377e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#define RU16 0xFFFF 387e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#define RU8 0xFF 397e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 407e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#define PEDITKINDSIZ 16 417e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 427e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerstruct m_pedit_util 437e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger{ 447e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger struct m_pedit_util *next; 457e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger char id[PEDITKINDSIZ]; 467e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger int (*parse_peopt)(int *argc_p, char ***argv_p,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey); 477e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger}; 487e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 497e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 507e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerextern int parse_cmd(int *argc_p, char ***argv_p, __u32 len, int type,__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey); 517e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerextern int pack_key(struct tc_pedit_sel *sel,struct tc_pedit_key *tkey); 527e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerextern int pack_key32(__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey); 537e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerextern int pack_key16(__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey); 547e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerextern int pack_key8(__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey); 557e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerextern int parse_val(int *argc_p, char ***argv_p, __u32 * val, int type); 567e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerextern int parse_cmd(int *argc_p, char ***argv_p, __u32 len, int type,__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey); 577e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerextern int parse_offset(int *argc_p, char ***argv_p,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey); 587e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerint parse_pedit(struct action_util *a, int *argc_p, char ***argv_p, int tca_id, struct nlmsghdr *n); 597e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerextern int print_pedit(struct action_util *au,FILE * f, struct rtattr *arg); 60extern int pedit_print_xstats(struct action_util *au, FILE *f, struct rtattr *xstats); 61 62#endif 63