summaryrefslogtreecommitdiffstats
path: root/sys/netmpls
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netmpls')
-rw-r--r--sys/netmpls/mpls.h14
-rw-r--r--sys/netmpls/mpls_input.c10
-rw-r--r--sys/netmpls/mpls_raw.c4
3 files changed, 17 insertions, 11 deletions
diff --git a/sys/netmpls/mpls.h b/sys/netmpls/mpls.h
index 7b4b464d642..03017c9b63c 100644
--- a/sys/netmpls/mpls.h
+++ b/sys/netmpls/mpls.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: mpls.h,v 1.13 2008/10/28 01:16:14 michele Exp $ */
+/* $OpenBSD: mpls.h,v 1.14 2008/11/01 16:37:55 michele Exp $ */
/*
* Copyright (C) 1999, 2000 and 2001 AYAME Project, WIDE Project.
@@ -116,7 +116,9 @@ struct sockaddr_mpls {
#define MPLSCTL_DEFTTL 2
#define MPLSCTL_IFQUEUE 3
#define MPLSCTL_MAXINKLOOP 4
-#define MPLSCTL_MAXID 5
+#define MPLSCTL_MAPTTL_IP 5
+#define MPLSCTL_MAPTTL_IP6 6
+#define MPLSCTL_MAXID 7
#define MPLSCTL_NAMES { \
{ 0, 0 }, \
@@ -124,6 +126,8 @@ struct sockaddr_mpls {
{ "ttl", CTLTYPE_INT }, \
{ "ifq", CTLTYPE_NODE },\
{ "maxloop_inkernel", CTLTYPE_INT }, \
+ { "mapttl_ip", CTLTYPE_INT }, \
+ { "mapttl_ip6", CTLTYPE_INT }, \
}
#define MPLSCTL_VARS { \
@@ -132,6 +136,8 @@ struct sockaddr_mpls {
&mpls_defttl, \
0, \
&mpls_inkloop, \
+ &mpls_mapttl_ip, \
+ &mpls_mapttl_ip6, \
}
#endif
@@ -151,9 +157,9 @@ struct mpe_softc {
#define MPE_MTU_MAX 8192
void mpe_input(struct mbuf *, struct ifnet *, struct sockaddr_mpls *,
- u_int32_t);
+ u_int8_t);
void mpe_input6(struct mbuf *, struct ifnet *, struct sockaddr_mpls *,
- u_int32_t);
+ u_int8_t);
extern int mpls_raw_usrreq(struct socket *, int, struct mbuf *,
struct mbuf *, struct mbuf *, struct proc *);
diff --git a/sys/netmpls/mpls_input.c b/sys/netmpls/mpls_input.c
index 39ff4c621b6..e267fd9ea1b 100644
--- a/sys/netmpls/mpls_input.c
+++ b/sys/netmpls/mpls_input.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mpls_input.c,v 1.14 2008/10/14 20:43:33 michele Exp $ */
+/* $OpenBSD: mpls_input.c,v 1.15 2008/11/01 16:37:55 michele Exp $ */
/*
* Copyright (c) 2008 Claudio Jeker <claudio@openbsd.org>
@@ -71,9 +71,9 @@ mpls_input(struct mbuf *m)
struct ifnet *ifp = m->m_pkthdr.rcvif;
struct sockaddr_mpls *smpls;
struct sockaddr_mpls sa_mpls;
- struct shim_hdr *shim;
+ struct shim_hdr *shim;
struct rtentry *rt = NULL;
- u_int32_t ttl;
+ u_int8_t ttl;
int i, hasbos;
if (!mpls_enable) {
@@ -111,7 +111,7 @@ mpls_input(struct mbuf *m)
m_freem(m);
return;
}
- ttl = htonl(ttl - 1);
+ ttl--;
for (i = 0; i < mpls_inkloop; i++) {
bzero(&sa_mpls, sizeof(sa_mpls));
@@ -219,7 +219,7 @@ mpls_input(struct mbuf *m)
}
/* write back TTL */
- shim->shim_label = (shim->shim_label & ~MPLS_TTL_MASK) | ttl;
+ shim->shim_label = (shim->shim_label & ~MPLS_TTL_MASK) | htonl(ttl);
#ifdef MPLS_DEBUG
printf("MPLS: sending on %s outlabel %x dst af %d in %d out %d\n",
diff --git a/sys/netmpls/mpls_raw.c b/sys/netmpls/mpls_raw.c
index 1f3257cb7ab..2350afe652d 100644
--- a/sys/netmpls/mpls_raw.c
+++ b/sys/netmpls/mpls_raw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mpls_raw.c,v 1.3 2008/05/23 16:03:03 thib Exp $ */
+/* $OpenBSD: mpls_raw.c,v 1.4 2008/11/01 16:37:55 michele Exp $ */
/*
* Copyright (C) 1999, 2000 and 2001 AYAME Project, WIDE Project.
@@ -129,7 +129,7 @@ mpls_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp,
size_t newlen)
{
if (name[0] >= MPLSCTL_MAXID)
- return EOPNOTSUPP;
+ return (EOPNOTSUPP);
/* Almost all sysctl names at this level are terminal. */
if (namelen != 1 && name[0] != MPLSCTL_IFQUEUE)