]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/examples/libifc/setmtu.c
When -n is specified, don't make bogus DNS queries. Instead,
[FreeBSD/FreeBSD.git] / share / examples / libifc / setmtu.c
1 /*
2  * Copyright (c) 2016, Marie Helene Kvello-Aune
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * thislist of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation and/or
13  * other materials provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its contributors
16  * may be used to endorse or promote products derived from this software without
17  * specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  * $FreeBSD$
31  */
32
33 #include <err.h>
34 #include <errno.h>
35 #include <net/if.h>
36 #include <sys/ioctl.h>
37 #include <stdio.h>
38 #include <stdlib.h>
39 #include <string.h>
40 #include <libifc.h>
41
42
43 int main(int argc, char *argv[])
44 {
45         if (argc != 3) {
46                 errx(EINVAL, "Invalid number of arguments."
47                     " First argument should be interface name, second argument"
48                     " should be the MTU to set.");
49         }
50
51         char *ifname, *ptr;
52         int mtu;
53
54         /* We have a static number of arguments. Therefore we can do it simple. */
55         ifname = strdup(argv[1]);
56         mtu = (int)strtol(argv[2], &ptr, 10);
57
58         printf("Interface name: %s\n", ifname);
59         printf("New MTU: %d", mtu);
60
61         libifc_handle_t *lifh = libifc_open();
62         if (libifc_set_mtu(lifh, ifname, mtu) == 0) {
63                 printf("Successfully changed MTU of %s to %d\n", ifname, mtu);
64                 libifc_close(lifh);
65                 lifh = NULL;
66                 free(ifname);
67                 return (0);
68         } else {
69                 switch (libifc_err_errtype(lifh)) {
70                 case SOCKET:
71                         warnx("couldn't create socket. This shouldn't happen.\n");
72                         break;
73                 case IOCTL:
74                         if (libifc_err_ioctlreq(lifh) == SIOCSIFMTU) {
75                                 warnx("Failed to set MTU (SIOCSIFMTU)\n");
76                         } else {
77                                 warnx(
78                                         "Failed to set MTU due to error in unexpected ioctl() call %lu. Error code: %i.\n",
79                                         libifc_err_ioctlreq(lifh),
80                                         libifc_err_errno(lifh));
81                         }
82                         break;
83                 default:
84                         warnx(
85                                 "Should basically never end up here in this example.\n");
86                         break;
87                 }
88
89                 libifc_close(lifh);
90                 lifh = NULL;
91                 free(ifname);
92                 return (-1);
93         }
94 }