- struct ifreq ifr;
- struct sockaddr_ll sa;
-cp
- if(!get_config_string(lookup_config(config_tree, "Interface"), &interface))
- interface = "eth0";
-
- if(!get_config_string(lookup_config(config_tree, "Device"), &device))
- device = interface;
-
- device_info = _("raw socket");
-cp
- if((device_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0)
- {
- syslog(LOG_ERR, _("Could not open %s: %s"), device_info, strerror(errno));
- return -1;
- }
-
- memset(&ifr, 0, sizeof(ifr));
- strncpy(ifr.ifr_ifrn.ifrn_name, interface, IFNAMSIZ);
- if(ioctl(device_fd, SIOCGIFINDEX, &ifr))
- {
- close(device_fd);
- syslog(LOG_ERR, _("Can't find interface %s: %s"), interface, strerror(errno));
- return -1;
- }
-
- memset(&sa, '0', sizeof(sa));
- sa.sll_family = AF_PACKET;
- sa.sll_protocol = htons(ETH_P_ALL);
- sa.sll_ifindex = ifr.ifr_ifindex;
-
- if(bind(device_fd, (struct sockaddr *)&sa, (socklen_t)sizeof(sa)))
- {
- syslog(LOG_ERR, _("Could not bind to %s: %s"), device, strerror(errno));
- return -1;
- }
-cp
- /* Set default MAC address for ethertap devices */
-
- mymac.type = SUBNET_MAC;
- mymac.net.mac.address.x[0] = 0xfe;
- mymac.net.mac.address.x[1] = 0xfd;
- mymac.net.mac.address.x[2] = 0x00;
- mymac.net.mac.address.x[3] = 0x00;
- mymac.net.mac.address.x[4] = 0x00;
- mymac.net.mac.address.x[5] = 0x00;
-
- syslog(LOG_INFO, _("%s is a %s"), device, device_info);
-cp
- return 0;
+ struct ifreq ifr;
+ struct sockaddr_ll sa;
+
+ cp();
+
+ if(!get_config_string
+ (lookup_config(config_tree, "Interface"), &interface))
+ interface = "eth0";
+
+ if(!get_config_string(lookup_config(config_tree, "Device"), &device))
+ device = interface;
+
+ device_info = _("raw socket");
+
+ if((device_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0) {
+ logger(LOG_ERR, _("Could not open %s: %s"), device_info,
+ strerror(errno));
+ return false;
+ }
+
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_ifrn.ifrn_name, interface, IFNAMSIZ);
+ if(ioctl(device_fd, SIOCGIFINDEX, &ifr)) {
+ close(device_fd);
+ logger(LOG_ERR, _("Can't find interface %s: %s"), interface,
+ strerror(errno));
+ return false;
+ }
+
+ memset(&sa, '0', sizeof(sa));
+ sa.sll_family = AF_PACKET;
+ sa.sll_protocol = htons(ETH_P_ALL);
+ sa.sll_ifindex = ifr.ifr_ifindex;
+
+ if(bind(device_fd, (struct sockaddr *) &sa, (socklen_t) sizeof(sa))) {
+ logger(LOG_ERR, _("Could not bind to %s: %s"), device, strerror(errno));
+ return false;
+ }
+
+ logger(LOG_INFO, _("%s is a %s"), device, device_info);
+
+ return true;