~j-harbott/cirros/dev

« back to all changes in this revision

Viewing changes to src/sbin/ip.README

  • Committer: Scott Moser
  • Date: 2011-09-21 00:58:21 UTC
  • Revision ID: smoser@ubuntu.com-20110921005821-fxtb4o4xaqktm1dm
add 'src' from old ttylinux-uec (revno 55).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/sbin/ip is actually compiled from the program below.
 
2
 
 
3
/*
 
4
 * ip-rename-hack.c
 
5
 * This exists only to be a accept libvirt's call to 'ip' inside the guest
 
6
 * (LP: 828211). It calls: ip link set veth1 name eth0
 
7
 *
 
8
 * build with: 
 
9
 *   gcc -o ip-rename-hack ip-rename-hack.c -static
 
10
 *   strip -s ip-rename-hack
 
11
 *   cp ip-rename-hack rootd/sbin/ip
 
12
 *   
 
13
 */
 
14
#include <stdio.h>
 
15
#include <net/if.h>
 
16
#include <linux/sockios.h>
 
17
#include <errno.h>
 
18
 
 
19
#include <string.h>
 
20
 
 
21
int badUsage(void) {
 
22
   fprintf(stderr,
 
23
"Bad Usage: This program only serves to take input of the form\n\
 
24
  ip link set $ORIG name $NEW\n\
 
25
ie:\n\
 
26
  ip link set veth1 name eth0\n\
 
27
Any thing else is bogus.\n");
 
28
   return(1);
 
29
}
 
30
 
 
31
int get_socket(void) {
 
32
    int fd;
 
33
    fd = socket(PF_INET, SOCK_DGRAM, 0);
 
34
    if (fd >= 0)
 
35
        return fd;
 
36
    fd = socket(PF_PACKET, SOCK_DGRAM, 0);
 
37
    if (fd >= 0)
 
38
        return fd;
 
39
    return(0);
 
40
}
 
41
 
 
42
int main(int argc, char* argv[]) {
 
43
   struct ifreq ifr;
 
44
   int fd, ret;
 
45
   int namelen = 16;
 
46
   char *dev, *newdev;
 
47
   if(argc != 6) {
 
48
      return(badUsage());
 
49
   }
 
50
   if(strcmp(argv[2], "set") || strcmp(argv[4],"name")) {
 
51
      return(badUsage());
 
52
   }
 
53
   dev = argv[3];
 
54
   newdev = argv[5];
 
55
   if ((fd = get_socket()) == 0) {
 
56
      fprintf(stderr,"failed to get fd\n");
 
57
      return(1);
 
58
   }
 
59
   strncpy(ifr.ifr_name, dev, namelen);
 
60
   strncpy(ifr.ifr_newname, newdev, namelen);
 
61
   printf("rename %s to %s\n", dev, newdev);
 
62
   ret = ioctl(fd, SIOCSIFNAME, &ifr);
 
63
   if (ret < 0) {
 
64
      perror("failed");
 
65
      fprintf(stderr, "failed\n");
 
66
      return(2);
 
67
   }
 
68
   close(fd);
 
69
   printf("renamed %s to %s\n", dev, newdev);
 
70
   return(0);
 
71
}