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