rpms/tunctl/F-8 tunctl.c?rev=1.4, NONE, 1.1 tunctl.sgml?rev=238, NONE, 1.1 tunctl.spec, NONE, 1.1

Lubomir Kundrak (lkundrak) fedora-extras-commits at redhat.com
Wed Mar 26 17:25:04 UTC 2008


Author: lkundrak

Update of /cvs/pkgs/rpms/tunctl/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv23646/F-8

Added Files:
	tunctl.c?rev=1.4 tunctl.sgml?rev=238 tunctl.spec 
Log Message:
Initial import


--- NEW FILE tunctl.c?rev=1.4 ---
/* Copyright 2002 Jeff Dike
 * Licensed under the GPL
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <pwd.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <linux/if_tun.h>

static void Usage(char *name)
{
  fprintf(stderr, "Create: %s [-b] [-u owner] [-t device-name] "
	  "[-f tun-clone-device]\n", name);
  fprintf(stderr, "Delete: %s -d device-name [-f tun-clone-device]\n\n", 
	  name);
  fprintf(stderr, "The default tun clone device is /dev/net/tun - some systems"
	  " use\n/dev/misc/net/tun instead\n\n");
  fprintf(stderr, "-b will result in brief output (just the device name)\n");
  exit(1);
}

int main(int argc, char **argv)
{
  struct ifreq ifr;
  struct passwd *pw;
  long owner = geteuid();
  int tap_fd, opt, delete = 0, brief = 0;
  char *tun = "", *file = "/dev/net/tun", *name = argv[0], *end;

  while((opt = getopt(argc, argv, "bd:f:t:u:")) > 0){
    switch(opt) {
      case 'b':
        brief = 1;
        break;
      case 'd':
        delete = 1;
	tun = optarg;
        break;
      case 'f':
	file = optarg;
	break;
      case 'u':
	pw = getpwnam(optarg);
	if(pw != NULL){
	  owner = pw->pw_uid;
	  break;
	}
        owner = strtol(optarg, &end, 0);
	if(*end != '\0'){
	  fprintf(stderr, "'%s' is neither a username nor a numeric uid.\n",
		  optarg);
	  Usage(name);
	}
        break;
      case 't':
        tun = optarg;
        break;
      case 'h':
      default:
        Usage(name);
    }
  }

  argv += optind;
  argc -= optind;

  if(argc > 0)
    Usage(name);

  if((tap_fd = open(file, O_RDWR)) < 0){
    fprintf(stderr, "Failed to open '%s' : ", file);
    perror("");
    exit(1);
  }

  memset(&ifr, 0, sizeof(ifr));

  ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
  strncpy(ifr.ifr_name, tun, sizeof(ifr.ifr_name) - 1);
  if(ioctl(tap_fd, TUNSETIFF, (void *) &ifr) < 0){
    perror("TUNSETIFF");
    exit(1);
  }

  if(delete){
    if(ioctl(tap_fd, TUNSETPERSIST, 0) < 0){
      perror("TUNSETPERSIST");
      exit(1);
    }    
    printf("Set '%s' nonpersistent\n", ifr.ifr_name);
  }
  else {
    if(ioctl(tap_fd, TUNSETPERSIST, 1) < 0){
      perror("TUNSETPERSIST");
      exit(1);
    }
    if(ioctl(tap_fd, TUNSETOWNER, owner) < 0){
      perror("TUNSETPERSIST");
      exit(1);
    } 
    if(brief)
      printf("%s\n", ifr.ifr_name);
    else printf("Set '%s' persistent and owned by uid %ld\n", ifr.ifr_name, 
		owner);
  }
  return(0);
}


--- NEW FILE tunctl.sgml?rev=238 ---
<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [

<!-- Process this file with docbook-to-man to generate an nroff manual
     page: `docbook-to-man manpage.sgml > manpage.1'.  You may view
     the manual page with: `docbook-to-man manpage.sgml | nroff -man |
     less'.  A typical entry in a Makefile or Makefile.am is:

manpage.1: manpage.sgml
	docbook-to-man $< > $@
  -->

  <!-- Fill in your name for FIRSTNAME and SURNAME. -->
  <!ENTITY dhfirstname "<firstname>Matt</firstname>">
  <!ENTITY dhsurname   "<surname>Zimmerman</surname>">
  <!-- Please adjust the date whenever revising the manpage. -->
  <!ENTITY dhdate      "<date>February 12, 2002</date>">
  <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
       allowed: see man(7), man(1). -->
  <!ENTITY dhsection   "<manvolnum>8</manvolnum>">
  <!ENTITY dhemail     "<email>mdz at debian.org</email>">
  <!ENTITY dhusername  "Matt Zimmerman">
  <!ENTITY dhucpackage "<refentrytitle>TUNCTL</refentrytitle>">
  <!ENTITY dhpackage   "tunctl">

  <!ENTITY debian      "<productname>Debian GNU/Linux</productname>">
  <!ENTITY gnu         "<acronym>GNU</acronym>">
]>

<refentry>
  <refentryinfo>
    <address>
      &dhemail;
    </address>
    <author>
      &dhfirstname;
      &dhsurname;
    </author>
    <copyright>
      <year>2001</year>
      <holder>&dhusername;</holder>
    </copyright>
    &dhdate;
  </refentryinfo>
  <refmeta>
    &dhucpackage;

    &dhsection;
  </refmeta>
  <refnamediv>
    <refname>&dhpackage;</refname>

    <refpurpose>create and manage persistent TUN/TAP interfaces</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <cmdsynopsis>
      
      <command>&dhpackage;</command>

      <arg choice=opt><option>-f</option> <replaceable>tun-clone-device</replaceable></arg>

      <arg><option>-u</option> <replaceable>owner</replaceable></arg>
      <arg><option>-t</option> <replaceable>device-name</replaceable></arg>

    </cmdsynopsis>

    <cmdsynopsis>
      <command>&dhpackage;</command>

      <arg choice=opt><option>-f</option> <replaceable>tun-clone-device</replaceable></arg>
      <arg choice=req><option>-d</option> <replaceable>device-name</replaceable></arg>
    </cmdsynopsis>

  </refsynopsisdiv>
  <refsect1>
    <title>DESCRIPTION</title>

    <para>This manual page documents briefly the
      <command>&dhpackage;</command> command.</para>

    <para>This manual page was written for the &debian; distribution
      because the original program does not have a manual page.
      Instead, it has documentation in HTML format; see below.</para>

    <para><command>&dhpackage;</command> allows the host sysadmin to
    preconfigure a TUN/TAP device for use by a particular user.  That
    user may open and use the device, but may not change any aspects
    of the host side of the interface.</para>

  </refsect1>

  <refsect1>
    <title>USAGE</title>

    <para>To create an interface for use by a particular user, invoke
    tunctl without the -d option:</para>

    <informalexample>
      <screen>
        <prompt>#</prompt> <userinput>tunctl -u someuser</userinput>

        Set 'tap0' persistent and owned by 'someuser'
      </screen>
    </informalexample>

    <para>Then, configure the interface as normal:</para>

    <informalexample>
      <screen>
        <prompt>#</prompt> <userinput>ifconfig tap0 192.168.0.254 up</userinput>

        <prompt>#</prompt> <userinput>route add -host 192.168.0.253 dev tap0</userinput>

        <prompt>#</prompt> <userinput>bash -c 'echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp'</userinput>

        <prompt>#</prompt> <userinput>arp -Ds 192.168.0.253 eth0 pub</userinput>
      </screen>
    </informalexample>

    <para>To delete the interface, use the -d option:</para>

    <informalexample>
      <screen>
        <prompt>#</prompt> <userinput>tunctl -d tap0</userinput>

        Set 'tap0' nonpersistent
      </screen>
    </informalexample>
  </refsect1>

  <refsect1>
    <title>SEE ALSO</title>

    <para>The <ulink
    url="http://user-mode-linux.sourceforge.net/UserModeLinux-HOWTO.html"
    type=alternate>UserModeLinux-HOWTO</ulink></para>
  </refsect1>
  <refsect1>
    <title>AUTHOR</title>

    <para>&dhpackage; was written by Jeff Dike
    <email>jdike at karaya.com</email></para> 

    <para>This manual page was written by &dhusername; &dhemail; for
      the &debian; system, based on examples from Jeff Dike.</para>

  </refsect1>
</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:2
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:nil
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->


--- NEW FILE tunctl.spec ---
Name:           tunctl
Version:        1.4
Release:        2%{?dist}
Summary:        Create and remove virtual network interfaces

Group:          Applications/System
License:        GPL+
URL:            http://www.user-mode-linux.org/
Source0:        http://www.user-mode-linux.org/cvs/*checkout*/tools/tunctl/tunctl.c?rev=%{version}
# This is from Debian, http://packages.debian.org/sid/uml-utilities
Source1:        http://svn.debian.org/viewsvn/*checkout*/pkg-uml/trunk/src/uml-utilities/debian/tunctl.sgml?rev=238
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRequires:  docbook-utils

%description
Virtual network interface manipulation tool from User Mode Linux project.


%prep
%setup -T -c -n %{name}-%{version}
%{__cp} %{SOURCE0} tunctl.c
%{__cp} %{SOURCE1} tunctl.sgml

%build
%{__cc} %{optflags} tunctl.c -o tunctl
docbook2man tunctl.sgml


%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT%{_sbindir}
install -d $RPM_BUILD_ROOT%{_mandir}/man8
install -m 755 tunctl $RPM_BUILD_ROOT%{_sbindir}
install -m 644 TUNCTL.8 $RPM_BUILD_ROOT%{_mandir}/man8/tunctl.8


%clean
rm -rf $RPM_BUILD_ROOT


%files
%defattr(-,root,root,-)
%{_mandir}/man8/tunctl.8*
%{_sbindir}/tunctl
#%doc


%changelog
* Tue Mar 25 2008 Lubomir Kundrak <lkundrak at redhat.com> 1.4-2
- Move to sbin (Marek Mahut, #434583)

* Fri Feb 22 2008 Lubomir Kundrak <lkundrak at redhat.com> 1.4-1
- Initial packaging




More information about the fedora-extras-commits mailing list