Index: dvbsnoop.c =================================================================== RCS file: /cvs/tuxbox/apps/dvb/dvbsnoop/src/dvbsnoop.c,v retrieving revision 1.32 diff -u -r1.32 dvbsnoop.c --- a/dvbsnoop.c 6 Sep 2005 23:13:50 -0000 1.32 +++ b/dvbsnoop.c 29 Aug 2006 21:51:12 -0000 @@ -142,9 +142,61 @@ #include "dvb_api/fe_info.h" +/* + * Open a tunnel/tap device as found in networking/tuntap.txt of the + * Linux Kernel + */ +#include +#include +#include +int tun_alloc(char *dev) +{ + struct ifreq ifr; + int fd, err; + + if( (fd = open("/dev/net/tun", O_RDWR)) < 0 ) { + perror("Error opening /dev/net/tun:"); + return -1; + } + + memset(&ifr, 0, sizeof(ifr)); + + /* Flags: IFF_TUN - TUN device (no Ethernet headers) + * IFF_TAP - TAP device + * + * IFF_NO_PI - Do not provide packet information + */ + ifr.ifr_flags = IFF_TUN | IFF_NO_PI; + if( *dev ) + strncpy(ifr.ifr_name, dev, IFNAMSIZ); + + if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){ + perror("IOCTL failed"); + close(fd); + return -1; + } + strcpy(dev, ifr.ifr_name); + return fd; +} +int tun_ifup( char* dev ) { + struct ifreq ifr; + int fd = socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP ); + strcpy( ifr.ifr_name, dev ); + if ( ioctl( fd, SIOCGIFFLAGS, &ifr ) < 0 ) + return -1; + + ifr.ifr_flags |= IFF_UP; + if ( ioctl( fd, SIOCSIFFLAGS, &ifr ) < 0 ) + return -2; + + return 0; +} + + +int tun_fd = -1; int main(int argc, char **argv) @@ -152,7 +204,7 @@ OPTION opt; int err = 0; - + char dev[20] = ""; /* -- init options and cmdline parsing @@ -166,7 +218,12 @@ setVerboseLevel (opt.printdecode); setHexPrintMode (opt.printhex); - + if(! opt.tap_fd ) { + tun_fd = tun_alloc(dev); + printf( "Opened TAP device: %d %s\n", tun_fd, dev ); + if ( tun_fd >= 0 ) + tun_ifup( dev ); + } indent (0); if (! opt.binary_out) { cvs diff: Diffing datacarousel Index: datacarousel/datagram.c =================================================================== RCS file: /cvs/tuxbox/apps/dvb/dvbsnoop/src/datacarousel/datagram.c,v retrieving revision 1.19 diff -u -r1.19 datagram.c --- a/datacarousel/datagram.c 2 Jan 2006 18:23:47 -0000 1.19 +++ b/datacarousel/datagram.c 29 Aug 2006 21:51:12 -0000 @@ -85,7 +85,7 @@ #include "misc/output.h" - +extern int tun_fd; void section_DSMCC_DATAGRAM (u_char *b, int len) @@ -204,6 +204,9 @@ int k; k = llc_snap (4,b); } else { + if ( tun_fd > 0 ) { + write(tun_fd, b, len1-4); + } print_databytes (4, "IP_datagram_bytes", b, len1-4); } b += (len1 - 4); cvs diff: Diffing descriptors cvs diff: Diffing dvb_api Index: dvb_api/dmx_tspidscan.c =================================================================== RCS file: /cvs/tuxbox/apps/dvb/dvbsnoop/src/dvb_api/dmx_tspidscan.c,v retrieving revision 1.23 diff -u -r1.23 dmx_tspidscan.c --- a/dvb_api/dmx_tspidscan.c 2 Jan 2006 18:23:59 -0000 1.23 +++ b/dvb_api/dmx_tspidscan.c 29 Aug 2006 21:51:12 -0000 @@ -133,8 +133,8 @@ // timeout in ms // TimoutHIGH will be used on PIDs < 0x20 -#define PID_TIMEOUT_LOW (250 - PID_TIME_WAIT) -#define PID_TIMEOUT_HIGH (30100 - PID_TIME_WAIT) +#define PID_TIMEOUT_LOW (10000 - PID_TIME_WAIT) +#define PID_TIMEOUT_HIGH (40100 - PID_TIME_WAIT) // max filters (will be checked dynamically) #define MAX_PID_FILTER 256 cvs diff: Diffing ebu cvs diff: Diffing misc Index: misc/cmdline.c =================================================================== RCS file: /cvs/tuxbox/apps/dvb/dvbsnoop/src/misc/cmdline.c,v retrieving revision 1.51 diff -u -r1.51 cmdline.c --- a/misc/cmdline.c 6 Mar 2006 00:04:54 -0000 1.51 +++ b/misc/cmdline.c 29 Aug 2006 21:51:12 -0000 @@ -281,6 +281,7 @@ memset(opt->filter, 0, DMX_FILTER_SIZE); memset(opt->mask, 0, DMX_FILTER_SIZE); + opt->tap_fd = -1; // -- store for getOption opt_ptr = opt; @@ -367,6 +368,8 @@ } else if (isdigit (argv[i][0])) { opt->pid = str2i(argv[i]); // PID if (opt->pid > MAX_PID) opt->help = 1; + } else if (!strcmp(argv[i],"-tap")) { + opt->tap_fd = 0; } else { opt->help = 1; break; Index: misc/cmdline.h =================================================================== RCS file: /cvs/tuxbox/apps/dvb/dvbsnoop/src/misc/cmdline.h,v retrieving revision 1.33 diff -u -r1.33 cmdline.h --- a/misc/cmdline.h 6 Mar 2006 00:04:54 -0000 1.33 +++ b/misc/cmdline.h 29 Aug 2006 21:51:12 -0000 @@ -64,6 +64,7 @@ int dsmcc_save; // save modules from DSM-CC to file int hide_copyright; // suppress message at prog start int help; + int tap_fd; // TUN/TAP Filedescriptor used to dumb packages into the IP Stack } OPTION; cvs diff: Diffing pes cvs diff: Diffing private cvs diff: Diffing private/default cvs diff: Diffing private/premiere.de cvs diff: Diffing sections cvs diff: Diffing strings cvs diff: Diffing testdata cvs diff: Diffing ts cvs diff: Diffing tvanytime