Skip to content

Commit

Permalink
Merge branch 'master' of /home/cero1/src/openwrt
Browse files Browse the repository at this point in the history
  • Loading branch information
Dave Taht committed Jun 19, 2012
2 parents 260e124 + 9121f3a commit 29351dd
Show file tree
Hide file tree
Showing 127 changed files with 2,667 additions and 2,109 deletions.
2 changes: 1 addition & 1 deletion include/kernel-defaults.mk
Expand Up @@ -119,7 +119,7 @@ OBJCOPY_STRIP = -R .reginfo -R .notes -R .note -R .comment -R .mdebug -R .note.g

define Kernel/CompileImage/Default
$(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),,rm -f $(TARGET_DIR)/init)
+$(MAKE) $(KERNEL_MAKEOPTS) $(KERNELNAME)
+$(MAKE) $(KERNEL_MAKEOPTS) $(subst ",,$(KERNELNAME))
$(KERNEL_CROSS)objcopy -O binary $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(LINUX_KERNEL)
$(KERNEL_CROSS)objcopy $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux.elf
endef
Expand Down
1 change: 1 addition & 0 deletions include/netfilter.mk
Expand Up @@ -185,6 +185,7 @@ $(eval $(call nf_add,IPT_NATHELPER,CONFIG_NF_NAT_IRC, $(P_V4)nf_nat_irc))

# nathelper-extra

$(eval $(call nf_add,IPT_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_BROADCAST, $(P_XT)nf_conntrack_broadcast))
$(eval $(call nf_add,IPT_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_AMANDA, $(P_XT)nf_conntrack_amanda))
$(eval $(call nf_add,IPT_NATHELPER_EXTRA,CONFIG_NF_NAT_AMANDA, $(P_V4)nf_nat_amanda))
$(eval $(call nf_add,IPT_NATHELPER_EXTRA,CONFIG_NF_CT_PROTO_GRE, $(P_XT)nf_conntrack_proto_gre))
Expand Down
4 changes: 2 additions & 2 deletions include/uclibc++.mk
Expand Up @@ -9,8 +9,8 @@ CXX_DEPENDS = +USE_UCLIBCXX:uclibcxx +USE_LIBSTDCXX:libstdcpp

ifneq ($(CONFIG_USE_UCLIBCXX),)
ifneq ($(CONFIG_CCACHE),)
TARGET_CXX_NOCACHE="g++-uc"
TARGET_CXX_NOCACHE=g++-uc
else
TARGET_CXX="g++-uc"
TARGET_CXX=g++-uc
endif
endif
2 changes: 0 additions & 2 deletions package/6in4/Makefile
Expand Up @@ -37,8 +37,6 @@ endef
define Package/6in4/install
$(INSTALL_DIR) $(1)/lib/netifd/proto
$(INSTALL_BIN) ./files/6in4.sh $(1)/lib/netifd/proto/6in4.sh
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_DATA) ./files/6in4.hotplug $(1)/etc/hotplug.d/iface/90-6in4
endef

$(eval $(call BuildPackage,6in4))
29 changes: 0 additions & 29 deletions package/6in4/files/6in4.hotplug

This file was deleted.

14 changes: 5 additions & 9 deletions package/6in4/files/6in4.sh
Expand Up @@ -9,13 +9,6 @@
init_proto "$@"
}

tun_error() {
local cfg="$1"; shift;

[ -n "$1" ] && proto_notify_error "$cfg" "$@"
proto_block_restart "$cfg"
}

proto_6in4_setup() {
local cfg="$1"
local iface="$2"
Expand All @@ -25,14 +18,17 @@ proto_6in4_setup() {
json_get_vars mtu ttl ipaddr peeraddr ip6addr tunnelid username password

[ -z "$ip6addr" -o -z "$peeraddr" ] && {
tun_error "$cfg" "MISSING_ADDRESS"
proto_notify_error "$cfg" "MISSING_ADDRESS"
proto_block_restart "$cfg"
return
}

( proto_add_host_dependency "$cfg" 0.0.0.0 )

[ -z "$ipaddr" ] && {
local wanif
if ! network_find_wan wanif || ! network_get_ipaddr ipaddr "$wanif"; then
tun_error "$cfg" "NO_WAN_LINK"
proto_notify_error "$cfg" "NO_WAN_LINK"
return
fi
}
Expand Down
53 changes: 53 additions & 0 deletions package/6rd/Makefile
@@ -0,0 +1,53 @@
#
# Copyright (C) 2010-2012 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=6rd
PKG_VERSION:=2
PKG_RELEASE:=1

include $(INCLUDE_DIR)/package.mk

define Package/6rd
SECTION:=ipv6
CATEGORY:=IPv6
DEPENDS:=+kmod-ipv6 +kmod-sit
TITLE:=6rd configuration support
MAINTAINER:=Stéphan Kochen <stephan@kochen.nl>
PKGARCH:=all
endef

define Package/6rd/description
Provides support for 6rd tunnels in /etc/config/network.
Refer to http://wiki.openwrt.org/doc/uci/network for
configuration details.
endef

define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Build/Configure
endef

define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) \
CC="$(TARGET_CC)" \
CFLAGS="$(TARGET_CFLAGS) -Wall" \
LDFLAGS="$(TARGET_LDFLAGS)"
endef

define Package/6rd/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/6rdcalc $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/lib/netifd/proto
$(INSTALL_BIN) ./files/6rd.sh $(1)/lib/netifd/proto/6rd.sh
endef

$(eval $(call BuildPackage,6rd))
79 changes: 79 additions & 0 deletions package/6rd/files/6rd.sh
@@ -0,0 +1,79 @@
#!/bin/sh
# 6rd.sh - IPv6-in-IPv4 tunnel backend
# Copyright (c) 2010-2012 OpenWrt.org

[ -n "$INCLUDE_ONLY" ] || {
. /lib/functions.sh
. /lib/functions/network.sh
. ../netifd-proto.sh
init_proto "$@"
}

proto_6rd_setup() {
local cfg="$1"
local iface="$2"
local link="6rd-$cfg"

local mtu ttl ipaddr peeraddr ip6prefix ip6prefixlen ip4prefixlen
json_get_vars mtu ttl ipaddr peeraddr ip6prefix ip6prefixlen ip4prefixlen

[ -z "$ip6prefix" -o -z "$peeraddr" ] && {
proto_notify_error "$cfg" "MISSING_ADDRESS"
proto_block_restart "$cfg"
return
}

( proto_add_host_dependency "$cfg" 0.0.0.0 )

[ -z "$ipaddr" ] && {
local wanif
if ! network_find_wan wanif || ! network_get_ipaddr ipaddr "$wanif"; then
proto_notify_error "$cfg" "NO_WAN_LINK"
return
fi
}

# Determine the relay prefix.
local ip4prefixlen="${ip4prefixlen:-0}"
local ip4prefix=$(ipcalc.sh "$ipaddr/$ip4prefixlen" | grep NETWORK)
ip4prefix="${ip4prefix#NETWORK=}"

# Determine our IPv6 address.
local ip6subnet=$(6rdcalc "$ip6prefix/$ip6prefixlen" "$ipaddr/$ip4prefixlen")
local ip6addr="${ip6subnet%%::*}::1"

proto_init_update "$link" 1
proto_add_ipv6_address "$ip6addr" "$ip6prefixlen"
proto_add_ipv6_route "::" 0 "::$peeraddr"

proto_add_tunnel
json_add_string mode sit
json_add_int mtu "${mtu:-1280}"
json_add_int ttl "${ttl:-64}"
json_add_string local "$ipaddr"
json_add_string 6rd-prefix "$ip6prefix/$ip6prefixlen"
json_add_string 6rd-relay-prefix "$ip4prefix/$ip4prefixlen"
proto_close_tunnel

proto_send_update "$cfg"
}

proto_6rd_teardown() {
local cfg="$1"
}

proto_6rd_init_config() {
no_device=1
available=1

proto_config_add_int "mtu"
proto_config_add_int "ttl"
proto_config_add_string "peeraddr"
proto_config_add_string "ip6prefix"
proto_config_add_string "ip6prefixlen"
proto_config_add_string "ip4prefixlen"
}

[ -n "$INCLUDE_ONLY" ] || {
add_protocol 6rd
}
126 changes: 126 additions & 0 deletions package/6rd/src/6rdcalc.c
@@ -0,0 +1,126 @@
/*
* Utility used to calculate the 6rd subnet.
*
* Copyright 2012, Stéphan Kochen <stephan@kochen.nl>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/errno.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#define INET_PREFIXSTRLEN (INET_ADDRSTRLEN+3)
#define INET6_PREFIXSTRLEN (INET6_ADDRSTRLEN+4)

static void print_usage()
{
fprintf(stderr, "Usage: 6rdcalc <v6 prefix>/<mask> <v4 address>/<mask>\n");
exit(1);
}

static void print_error()
{
fprintf(stderr, "%s", strerror(errno));
exit(1);
}

static void parse_str(int af, char *str, void *addr, unsigned long *mask)
{
int ret;
char *slash;

/* Split the address at the slash. */
if ((slash = strchr(str, '/')) == NULL)
print_usage();
*slash = '\0';

/* Parse the address. */
if ((ret = inet_pton(af, str, addr)) != 1) {
if (ret == 0)
print_usage();
else
print_error();
}

/* Parse the mask. */
*mask = strtoul(slash+1, NULL, 10);
if ((af == AF_INET && *mask > 32) ||
(af == AF_INET6 && *mask > 128))
print_usage();
}

int main(int argc, const char **argv)
{
char v6str[INET6_PREFIXSTRLEN], v4str[INET_PREFIXSTRLEN];
struct in6_addr v6;
struct in_addr v4;
unsigned long v6it, v4it, mask;
unsigned char *byte4, *byte6;
unsigned char bit4, bit6;

/* Check parameters. */
if (argc != 3)
print_usage();

/* Parse the v6 address. */
strncpy(v6str, argv[1], INET6_PREFIXSTRLEN);
v6str[INET6_PREFIXSTRLEN-1] = '\0';
parse_str(AF_INET6, v6str, &v6, &v6it);

/* Parse the v4 address */
strncpy(v4str, argv[2], INET_PREFIXSTRLEN);
v6str[INET_PREFIXSTRLEN-1] = '\0';
parse_str(AF_INET, v4str, &v4, &v4it);

/* Check if the combined mask is within bounds. */
mask = (32 - v4it) + v6it;
if (mask > 128)
print_usage();

/* Combine the addresses. */
while (v4it < 32) {
byte6 = (unsigned char *)(&v6.s6_addr) + (v6it >> 3);
byte4 = (unsigned char *)(&v4.s_addr) + (v4it >> 3);
bit6 = 128 >> (v6it & 0x07);
bit4 = 128 >> (v4it & 0x07);

if (*byte4 & bit4)
*byte6 |= bit6;
else
*byte6 &= ~bit6;

v4it++; v6it++;
}

/* Clear remaining bits. */
while (v6it < 128) {
byte6 = (unsigned char *)(&v6.s6_addr) + (v6it >> 2);
bit6 = 128 >> (v6it & 0x07);

*byte6 &= ~bit6;

v6it++;
}

/* Print the subnet prefix. */
if (inet_ntop(AF_INET6, &v6, v6str, sizeof(v6str)) == NULL)
print_error();
printf("%s/%lu\n", v6str, mask);
return 0;
}
7 changes: 7 additions & 0 deletions package/6rd/src/Makefile
@@ -0,0 +1,7 @@
all: 6rdcalc

6rdcalc: 6rdcalc.c
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<

clean:
rm -f 6rdcalc
2 changes: 0 additions & 2 deletions package/6to4/Makefile
Expand Up @@ -37,8 +37,6 @@ endef
define Package/6to4/install
$(INSTALL_DIR) $(1)/lib/netifd/proto
$(INSTALL_BIN) ./files/6to4.sh $(1)/lib/netifd/proto/6to4.sh
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_DATA) ./files/6to4.hotplug $(1)/etc/hotplug.d/iface/91-6to4
endef

$(eval $(call BuildPackage,6to4))

0 comments on commit 29351dd

Please sign in to comment.