1229972Sadrian/*-
2229972Sadrian * Copyright (c) 2010-2011 Monthadar Al Jaberi, TerraNet AB
3229972Sadrian * All rights reserved.
4229972Sadrian *
5229972Sadrian * Redistribution and use in source and binary forms, with or without
6229972Sadrian * modification, are permitted provided that the following conditions
7229972Sadrian * are met:
8229972Sadrian * 1. Redistributions of source code must retain the above copyright
9229972Sadrian *    notice, this list of conditions and the following disclaimer,
10229972Sadrian *    without modification.
11229972Sadrian * 2. Redistributions in binary form must reproduce at minimum a disclaimer
12229972Sadrian *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
13229972Sadrian *    redistribution must be conditioned upon including a substantially
14229972Sadrian *    similar Disclaimer requirement for further binary redistribution.
15229972Sadrian *
16229972Sadrian * NO WARRANTY
17229972Sadrian * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18229972Sadrian * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19229972Sadrian * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
20229972Sadrian * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21229972Sadrian * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
22229972Sadrian * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23229972Sadrian * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24229972Sadrian * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25229972Sadrian * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26229972Sadrian * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27229972Sadrian * THE POSSIBILITY OF SUCH DAMAGES.
28229972Sadrian *
29229972Sadrian * $FreeBSD$
30229972Sadrian */
31229972Sadrian#include <stdio.h>
32229972Sadrian#include <stdlib.h>
33229972Sadrian#include <fcntl.h>
34229972Sadrian#include <sys/ioctl.h>
35229972Sadrian
36229972Sadrian#include "if_wtapioctl.h"
37229972Sadrian
38229972Sadrianstatic int dev = -1;
39229972Sadrian
40229972Sadrianstatic void create(int id)
41229972Sadrian{
42229972Sadrian    if(ioctl(dev, WTAPIOCTLCRT, &id) < 0){
43229972Sadrian	printf("error creating wtap with id=%d\n", id);
44229972Sadrian    }
45229972Sadrian}
46229972Sadrian
47229972Sadrianstatic void delete(int id)
48229972Sadrian{
49229972Sadrian    if(ioctl(dev, WTAPIOCTLDEL, &id) < 0){
50229972Sadrian	printf("error deleting wtap with id=%d\n", id);
51229972Sadrian    }
52229972Sadrian}
53229972Sadrian
54229972Sadrianint main( int argc, const char* argv[])
55229972Sadrian{
56229972Sadrian    if(argc != 3){
57229972Sadrian      printf("usage: %s [c | d] wtap_id\n", argv[0]);
58229972Sadrian      return -1;
59229972Sadrian    }
60229972Sadrian    int id = atoi(argv[2]);
61229972Sadrian    if(!(id >= 0 && id < 64)){
62229972Sadrian	printf("wtap_id must be between 0 and 7\n");
63229972Sadrian	return -1;
64229972Sadrian    }
65229972Sadrian    dev = open("/dev/wtapctl", O_RDONLY);
66229972Sadrian    if(dev < 0){
67229972Sadrian      printf("error opening wtapctl cdev\n");
68229972Sadrian      return -1;
69229972Sadrian    }
70229972Sadrian    switch((char)*argv[1]){
71229972Sadrian      case 'c':
72229972Sadrian	create(id);
73229972Sadrian	break;
74229972Sadrian      case 'd':
75229972Sadrian	delete(id);
76229972Sadrian	break;
77229972Sadrian      default:
78298881Spfg	printf("wtap ioctl: unknown command '%c'\n", *argv[1]);
79229972Sadrian	return -1;
80229972Sadrian    }
81229972Sadrian    return 0;
82229972Sadrian}
83