From 06e9f125889471f27bb5fc415afaa1a9d703438a Mon Sep 17 00:00:00 2001 From: jjako Date: Mon, 19 Jan 2004 18:37:58 +0000 Subject: FreeBSD porting and IMSI bugfix --- sgsnemu/ippool.c | 1 + sgsnemu/sgsnemu.c | 6 +++++- sgsnemu/syserr.c | 1 + sgsnemu/tun.c | 17 ++++++++++------- 4 files changed, 17 insertions(+), 8 deletions(-) (limited to 'sgsnemu') diff --git a/sgsnemu/ippool.c b/sgsnemu/ippool.c index 331306f..321824b 100644 --- a/sgsnemu/ippool.c +++ b/sgsnemu/ippool.c @@ -14,6 +14,7 @@ * */ +#include #include /* in_addr */ #include /* calloc */ #include /* sscanf */ diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c index ecf8ee8..53a1cc0 100644 --- a/sgsnemu/sgsnemu.c +++ b/sgsnemu/sgsnemu.c @@ -374,7 +374,9 @@ int process_options(int argc, char **argv) { printf("Invalid IMSI\n"); return -1; } - options.imsi = ((uint64_t) (args_info.imsi_arg[ 0]-48)); + + options.imsi = 0xf000000000000000; + options.imsi |= ((uint64_t) (args_info.imsi_arg[ 0]-48)); options.imsi |= ((uint64_t) (args_info.imsi_arg[ 1]-48)) << 4; options.imsi |= ((uint64_t) (args_info.imsi_arg[ 2]-48)) << 8; options.imsi |= ((uint64_t) (args_info.imsi_arg[ 3]-48)) << 12; @@ -655,6 +657,8 @@ int imsi_add(uint64_t src, uint64_t *dst, int add) { i64 = i64 / 10; } + *dst |= 0xf000000000000000; + return 0; } diff --git a/sgsnemu/syserr.c b/sgsnemu/syserr.c index 9d793e0..7223414 100644 --- a/sgsnemu/syserr.c +++ b/sgsnemu/syserr.c @@ -15,6 +15,7 @@ */ #include +#include #include #include #include diff --git a/sgsnemu/tun.c b/sgsnemu/tun.c index 0369796..219d040 100644 --- a/sgsnemu/tun.c +++ b/sgsnemu/tun.c @@ -56,6 +56,9 @@ #include #include /*#include "sun_if_tun.h"*/ +#elif defined (__FreeBSD__) +#include +#include #endif @@ -347,7 +350,7 @@ int tun_setaddr(struct tun_t *this, memset (&ifr, '\0', sizeof (ifr)); ifr.ifr_addr.sa_family = AF_INET; ifr.ifr_dstaddr.sa_family = AF_INET; -#ifndef __sun__ +#ifdef __linux__ ifr.ifr_netmask.sa_family = AF_INET; #endif strncpy(ifr.ifr_name, this->devname, IFNAMSIZ); @@ -391,7 +394,7 @@ int tun_setaddr(struct tun_t *this, if (netmask) { /* Set the netmask */ this->netmask.s_addr = netmask->s_addr; -#ifdef __sun__ +#if defined(__sun__) | defined(__FreeBSD__) ((struct sockaddr_in *) &ifr.ifr_dstaddr)->sin_addr.s_addr = dstaddr->s_addr; #else @@ -417,8 +420,8 @@ int tun_addroute(struct tun_t *this, struct in_addr *mask) { - /* TODO: Learn how to set routing table on sun */ -#ifndef __sun__ + /* TODO: Learn how to set routing table on sun and FreeBSD */ +#ifdef __linux__ struct rtentry r; int fd; @@ -457,11 +460,11 @@ int tun_addroute(struct tun_t *this, int tun_new(struct tun_t **tun) { -#ifndef __sun__ - struct ifreq ifr; -#else +#ifdef __sun__ int if_fd, ppa = -1; static int ip_fd = 0; +#else + struct ifreq ifr; #endif if (!(*tun = calloc(1, sizeof(struct tun_t)))) { -- cgit v1.2.3