vis_map.c revision 299826
1/*-
2 * Copyright (c) 2010-2011 Monthadar Al Jaberi, TerraNet AB
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer,
10 *    without modification.
11 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
12 *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
13 *    redistribution must be conditioned upon including a substantially
14 *    similar Disclaimer requirement for further binary redistribution.
15 *
16 * NO WARRANTY
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
20 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21 * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
22 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27 * THE POSSIBILITY OF SUCH DAMAGES.
28 *
29 * $FreeBSD: stable/10/tools/tools/wtap/vis_map/vis_map.c 299826 2016-05-15 03:15:36Z pfg $
30 */
31#include <stdio.h>
32#include <stdlib.h>
33#include <fcntl.h>
34#include <sys/ioctl.h>
35
36/*
37 * From the driver itself
38 */
39#include <plugins/visibility_ioctl.h>
40
41static int dev = -1;
42
43static void
44toggle_medium(int op)
45{
46	if (ioctl(dev, VISIOCTLOPEN, &op) < 0) {
47		printf("error opening/closing medium\n");
48	}
49}
50
51static void
52link_op(struct link *l)
53{
54	if (ioctl(dev, VISIOCTLLINK, l) < 0) {
55		printf("error making a link operation\n");
56	}
57}
58
59static void
60usage(const char *argv[])
61{
62	printf("usage: %s [o | c | [ [a|d]  wtap_id1  wtap_id2]]\n",
63	    argv[0]);
64}
65
66int
67main(int argc, const char* argv[])
68{
69	struct link l;
70	char cmd;
71
72	if (argc < 2) {
73		usage(argv);
74		exit(1);
75	}
76
77	dev = open("/dev/visctl", O_RDONLY);
78		if (dev < 0) {
79			printf("error opening visctl cdev\n");
80			exit(1);
81	}
82
83	cmd = (char)*argv[1];
84
85	switch (cmd) {
86	case 'o':
87		toggle_medium(1);
88		break;
89	case 'c':
90		toggle_medium(0);
91		break;
92	case 'a':
93		if (argc < 4) {
94			usage(argv);
95			exit(1);
96		}
97		l.op = 1;
98		l.id1 = atoi(argv[2]);
99		l.id2 = atoi(argv[3]);
100		link_op(&l);
101		break;
102	case 'd':
103		if (argc < 4) {
104			usage(argv);
105			exit(1);
106		}
107		l.op = 0;
108		l.id1 = atoi(argv[2]);
109		l.id2 = atoi(argv[3]);
110		link_op(&l);
111		break;
112	default:
113		printf("wtap ioctl: unknown command '%c'\n", *argv[1]);
114		exit(1);
115	}
116	exit(0);
117}
118