17e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger/* 27e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger * m_pedit_icmp.c packet editor: ICMP header 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#include <stdio.h> 147e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <stdlib.h> 157e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <unistd.h> 167e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <syslog.h> 177e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <fcntl.h> 187e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <sys/socket.h> 197e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <netinet/in.h> 207e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <arpa/inet.h> 217e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include <string.h> 227e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include "utils.h" 237e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include "tc_util.h" 247e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include "m_pedit.h" 257e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 267e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 277e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerstatic int 287e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerparse_icmp(int *argc_p, char ***argv_p,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey) 297e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger{ 307e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger int res = -1; 317e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#if 0 327e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger int argc = *argc_p; 337e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger char **argv = *argv_p; 347e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 357e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger if (argc < 2) 367e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger return -1; 377e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 387e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger if (strcmp(*argv, "type") == 0) { 397e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger NEXT_ARG(); 407e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger res = parse_u8(&argc, &argv, 0); 417e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger goto done; 427e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger } 437e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger if (strcmp(*argv, "code") == 0) { 447e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger NEXT_ARG(); 457e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger res = parse_u8(&argc, &argv, 1); 467e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger goto done; 477e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger } 487e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger return -1; 497e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 507e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger done: 517e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger *argc_p = argc; 527e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger *argv_p = argv; 537e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#endif 547e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger return res; 557e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger} 567e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 577e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerstruct m_pedit_util p_pedit_icmp = { 587e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger NULL, 597e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger "icmp", 607e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger parse_icmp, 617e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger}; 62