//-----------------------------------------------------------------------------
static int
__init gtpusp_tg_init(void)
//-----------------------------------------------------------------------------
{
  int            err;

  pr_info(MODULE_NAME": Initializing module (KVersion: %d)\n", KVERSION);
  pr_info(MODULE_NAME": Copyright Polaris Networks 2010-2011\n");
  pr_info(MODULE_NAME": Modified by EURECOM Lionel GAUTHIER 2014\n");
#ifndef CMAKER
  pr_info(MODULE_NAME": Compiled %s at time %s\n",__DATE__,__TIME__);
#endif
#if defined(WITH_IPV6)
  pr_info(MODULE_NAME": IPv4/IPv6 enabled\n");
#else
  pr_info(MODULE_NAME": IPv4 only enabled\n");
#endif
  pr_info(MODULE_NAME": params gtpu_enb_port=%u, gtpu_sgw_port=%u, sgw_addr=%s\n",
		  gtpu_enb_port, gtpu_sgw_port, sgw_addr);

  // UDP socket socket
  memset(&_gtpusp_sock, 0, sizeof(gtpusp_sock_t));

  /* create a socket */
  if ((err = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &_gtpusp_sock.sock)) < 0 ) {
	PR_INFO(": Could not create a datagram socket, error = %d\n", -ENXIO);
	return err;
  }

  _gtpusp_sock.addr.sin_family = AF_INET;
  _gtpusp_sock.addr.sin_port   = htons(gtpu_sgw_port);
  _gtpusp_sock.addr.sin_addr.s_addr   = in_aton(sgw_addr);

  _gtpusp_sock.addr_send.sin_family      = AF_INET;
  _gtpusp_sock.addr_send.sin_port        = htons(gtpu_enb_port);
  _gtpusp_sock.addr_send.sin_addr.s_addr = in_aton(sgw_addr);

  _gtpusp_sock.thread_stop_requested     = 0;

  if ( (err = _gtpusp_sock.sock->ops->bind(_gtpusp_sock.sock, (struct sockaddr *)&_gtpusp_sock.addr, sizeof(struct sockaddr) ) ) < 0) {
    pr_info(MODULE_NAME": Could not bind socket, error = %d\n", -err);
    goto close_and_out;
  }

  // start kernel thread
  _gtpusp_sock.thread = kthread_run((void *)_udp_thread, NULL, MODULE_NAME);
  if (IS_ERR(_gtpusp_sock.thread)) {
    pr_info(MODULE_NAME": unable to start kernel thread\n");
    return -ENOMEM;
  }
  if((_gtpusp_sock.thread)) {
    wake_up_process(_gtpusp_sock.thread);
  }
  return xt_register_targets(gtpusp_tg_reg, ARRAY_SIZE(gtpusp_tg_reg));
close_and_out:
	sock_release(_gtpusp_sock.sock);
	_gtpusp_sock.sock = NULL;
	return err;
}
Ejemplo n.º 2
0
static int __init init(void)
{
        printk("%s\n","insmod skb_diy module\n");

        cp_dev_xmit_tcp (ETH, SMAC, DMAC,NULL, 0, 
                        in_aton(SIP),in_aton(DIP),
                        htons(SPORT),htons(DPORT),
                        0, 0, 0, 0);
        return 0;
}
/* Allocate new target (from boot/module param) and setup netpoll for it */
static struct brcm_netconsole_target *alloc_param_target(char *target_config)
{
	int err = -ENOMEM;
	struct brcm_netconsole_target *nt;
	u8 remote_mac[ETH_ALEN];

	/*
	 * Allocate and initialize with defaults.
	 * Note that these targets get their config_item fields zeroed-out.
	 */
	nt = kzalloc(sizeof(*nt), GFP_KERNEL);
	if (!nt) {
		pr_err("brcm_netconsole: failed to allocate memory\n");
		goto fail;
	}

	nt->np.name = "brcm_netconsole";
	strlcpy(nt->np.dev_name, "rndis0", IFNAMSIZ);
	nt->np.local_port = 5042;
	nt->np.remote_port = 5042;
	remote_mac[0] = 0xaa;
	remote_mac[1] = 0xbb;
	remote_mac[2] = 0xcc;
	remote_mac[3] = 0xdd;
	remote_mac[4] = 0xee;
	remote_mac[5] = 0xff;
	memcpy(nt->np.remote_mac, remote_mac, ETH_ALEN);
	nt->np.remote_ip = in_aton("255.255.255.255");
	nt->np.local_ip = in_aton("192.168.42.129");

	/* Parse parameters and setup netpoll */
#if 0				/* kevin */
	err = netpoll_parse_options(&nt->np, target_config);
	if (err)
		goto fail;
#endif

	err = netpoll_setup(&nt->np);
	if (err)
		goto fail;

	nt->enabled = 1;
	nt_enabled = TRUE;

	return nt;

fail:
	kfree(nt);
	return ERR_PTR(err);
}
Ejemplo n.º 4
0
static int __init init(void)
{
	printk("nf_nat_rtsp v" IP_NF_RTSP_VERSION " loading\n");

	if (stunaddr != NULL)
		extip = in_aton(stunaddr);

	if (destaction != NULL) {
	        if (strcmp(destaction, "auto") == 0)
			dstact = DSTACT_AUTO;

		if (strcmp(destaction, "strip") == 0)
			dstact = DSTACT_STRIP;

		if (strcmp(destaction, "none") == 0)
			dstact = DSTACT_NONE;
	}

	BUG_ON(rcu_dereference(nf_nat_rtsp_hook));
	RCU_INIT_POINTER(nf_nat_rtsp_hook, help);

	BUG_ON(rcu_dereference(nf_nat_rtsp_hook_expectfn));
	RCU_INIT_POINTER(nf_nat_rtsp_hook_expectfn, expected);

	return 0;
}
Ejemplo n.º 5
0
int proc_lasat_ip(ctl_table *table, int write,
		       void *buffer, size_t *lenp, loff_t *ppos)
{
	unsigned int ip;
	char *p, c;
	int len;
	char ipbuf[32];

	if (!table->data || !table->maxlen || !*lenp ||
	    (*ppos && !write)) {
		*lenp = 0;
		return 0;
	}

	if (write) {
		len = 0;
		p = buffer;
		while (len < *lenp) {
			if (get_user(c, p++))
				return -EFAULT;
			if (c == 0 || c == '\n')
				break;
			len++;
		}
		if (len >= sizeof(ipbuf)-1)
			len = sizeof(ipbuf) - 1;
		if (copy_from_user(ipbuf, buffer, len))
			return -EFAULT;
		ipbuf[len] = 0;
		*ppos += *lenp;
		/* Now see if we can convert it to a valid IP */
		ip = in_aton(ipbuf);
		*(unsigned int *)(table->data) = ip;
		lasat_write_eeprom_info();
	} else {
		ip = *(unsigned int *)(table->data);
		sprintf(ipbuf, "%d.%d.%d.%d",
			(ip)       & 0xff,
			(ip >>  8) & 0xff,
			(ip >> 16) & 0xff,
			(ip >> 24) & 0xff);
		len = strlen(ipbuf);
		if (len > *lenp)
			len = *lenp;
		if (len)
			if (copy_to_user(buffer, ipbuf, len))
				return -EFAULT;
		if (len < *lenp) {
			if (put_user('\n', ((char *) buffer) + len))
				return -EFAULT;
			len++;
		}
		*lenp = len;
		*ppos += len;
	}

	return 0;
}
int myclient(void) {
    struct socket *sock;
    struct sockaddr_in s_addr;
    unsigned short portnum = 0x8888;
    int ret = 0;

    memset(&s_addr, 0, sizeof(s_addr));
    s_addr.sin_family = AF_INET;
    s_addr.sin_port = htons(portnum);

    s_addr.sin_addr.s_addr = in_aton("192.168.209.134"); /*server ip is 192.168.209.134*/
    sock = (struct socket *) kmalloc(sizeof(struct socket), GFP_KERNEL);

    /*create a socket*/
    ret = sock_create_kern(AF_INET, SOCK_STREAM, 0, &sock);
    if (ret < 0) {
        printk("client:socket create error!\n");
        return ret;
    }
    printk("client: socket create ok!\n");

    /*connect server*/
    ret = sock->ops->connect(sock, (struct sockaddr *) &s_addr, sizeof(s_addr), 0);
    if (ret != 0) {
        printk("client:connect error!\n");
        return ret;
    }
    printk("client:connect ok!\n");

    /*kmalloc sendbuf*/
    char *sendbuf = NULL;
    sendbuf = kmalloc(1024, GFP_KERNEL);
    if (sendbuf == NULL) {
        printk("client: sendbuf kmalloc error!\n");
        return -1;
    }
    memset(sendbuf, 1, 1024);

    struct kvec vec;
    struct msghdr msg;

    vec.iov_base = sendbuf;
    vec.iov_len = 1024;

    memset(&msg, 0, sizeof(msg));

    ret = kernel_sendmsg(sock, &msg, &vec, 1, 1024); /*send message */
    if (ret < 0) {
        printk("client: kernel_sendmsg error!\n");
        return ret;
    } else if (ret != 1024) {
        printk("client: ret!=1024");
    }
    printk("client:send ok!\n");

    return ret;
}
Ejemplo n.º 7
0
inline void sock_make_sockaddr_in(const char *ipaddr, const int port, struct sockaddr_in *sockaddr_out)
{
	memset(sockaddr_out, 0, sizeof(struct sockaddr_in) );
	sockaddr_out->sin_family = AF_INET;
	sockaddr_out->sin_port = htons(port);
	if( ipaddr )
		sockaddr_out->sin_addr.s_addr = in_aton(ipaddr);
	else
		sockaddr_out->sin_addr.s_addr = htonl(INADDR_ANY);
}
Ejemplo n.º 8
0
int send(struct socket *sock, struct sockaddr_in *addr, void * data, int len)
{
	
	struct msghdr msg;
        struct iovec iov;
        mm_segment_t oldfs;
        int size = 0;
	u_int32_t space;
        if (sock->sk==NULL)
           return 0;
	int interface=1;
	if(sock_setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char *)&interface,sizeof(interface))<0)	
	{
		printk(KERN_WARNING "No Broadcast");	
	}
        iov.iov_base = (char *) data;
        iov.iov_len = len;
	memset(&my_work->addr, 0, sizeof(struct sockaddr));
        memset(&my_work->addr_send, 0, sizeof(struct sockaddr));
        my_work->addr_send.sin_family = AF_INET;

        //my_work->addr_send.sin_addr.s_addr = htonl(INADDR_SEND);
        my_work->addr_send.sin_addr.s_addr = in_aton("255.255.255.255");
	//sock->sk->sk_flags.SOCK_BROADCAST=1;
        my_work->addr_send.sin_port = htons(CONNECT_PORT);
	
        msg.msg_flags = 0;
        msg.msg_name = (void *) & my_work->addr_send;
        msg.msg_namelen  = sizeof(struct sockaddr_in);
        msg.msg_control = NULL;
        msg.msg_controllen = 0;
        msg.msg_iov = &iov;
        msg.msg_iovlen = 1;
        msg.msg_control = NULL;
	if((space = sock_wspace(sock->sk))<len)
	{
		printk(KERN_INFO "ERROR");
		return -ENOMEM;

	}
	sock_set_flag(my_work->sock_send,SOCK_BROADCAST); 
	//sock->sk->broadcast=1;
        oldfs = get_fs();
        set_fs(KERNEL_DS);
        size = sock_sendmsg(sock,&msg,len);
	if(size<0)
		printk(KERN_WARNING "ERROR SEND MSG:%d:",size);
        set_fs(oldfs);
//	printk(KERN_INFO MODULE_NAME":Message Sent from new program");
	

        return size;
	
}
Ejemplo n.º 9
0
static void sendmsg(struct work_struct *dummy)
{
    int n;
    struct sockaddr_in addr;
    memset(&addr, 0x00, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(1000);
    addr.sin_addr.s_addr = in_aton("61.139.2.69");
    n = udp_sendto(sock, buffer, 128, 0, (struct sockaddr *)&addr,
                   sizeof(addr));
    printk("send %i bytes/n", n);
}
Ejemplo n.º 10
0
/* 回环设备的初始化 */
int
loopback_init(struct device *dev)
{
  dev->mtu		= 2000;			/* MTU			*/
  dev->tbusy		= 0;
  dev->hard_start_xmit	= loopback_xmit;
  dev->open		= NULL;
#if 1
  dev->hard_header	= eth_header;
  dev->add_arp		= NULL;
  dev->hard_header_len	= ETH_HLEN;		/* 14			*/
  dev->addr_len		= ETH_ALEN;		/* 6			*/
  dev->type		= ARPHRD_ETHER;		/* 0x0001		*/
  dev->type_trans	= eth_type_trans;
  dev->rebuild_header	= eth_rebuild_header;
#else
  dev->hard_header_length = 0;
  dev->add_arp		= NULL;
  dev->addr_len		= 0;
  dev->type		= 0;			/* loopback_type (0)	*/
  dev->hard_header	= NULL;
  dev->type_trans	= NULL;
  dev->rebuild_header	= NULL;
#endif
  dev->queue_xmit	= dev_queue_xmit;

  /* New-style flags. */
  dev->flags		= IFF_LOOPBACK;
  dev->family		= AF_INET;
  dev->pa_addr		= in_aton("127.0.0.1");
  dev->pa_brdaddr	= in_aton("127.255.255.255");
  dev->pa_mask		= in_aton("255.0.0.0");
  dev->pa_alen		= sizeof(unsigned long);
  dev->priv = kmalloc(sizeof(struct enet_statistics), GFP_KERNEL);
  memset(dev->priv, 0, sizeof(struct enet_statistics));
  dev->get_stats = get_stats;
  
  return(0);
};
Ejemplo n.º 11
0
struct p9_transport *p9_trans_create_tcp(const char *addr, int port)
{
	int err;
	struct p9_transport *trans;
	struct socket *csocket;
	struct sockaddr_in sin_server;

	csocket = NULL;
	trans = kmalloc(sizeof(struct p9_transport), GFP_KERNEL);
	if (!trans)
		return ERR_PTR(-ENOMEM);

	trans->write = p9_fd_write;
	trans->read = p9_fd_read;
	trans->close = p9_fd_close;
	trans->poll = p9_fd_poll;

	sin_server.sin_family = AF_INET;
	sin_server.sin_addr.s_addr = in_aton(addr);
	sin_server.sin_port = htons(port);
	sock_create_kern(PF_INET, SOCK_STREAM, IPPROTO_TCP, &csocket);

	if (!csocket) {
		P9_EPRINTK(KERN_ERR, "p9_trans_tcp: problem creating socket\n");
		err = -EIO;
		goto error;
	}

	err = csocket->ops->connect(csocket,
				    (struct sockaddr *)&sin_server,
				    sizeof(struct sockaddr_in), 0);
	if (err < 0) {
		P9_EPRINTK(KERN_ERR,
			"p9_trans_tcp: problem connecting socket to %s\n",
			addr);
		goto error;
	}

	err = p9_socket_open(trans, csocket);
	if (err < 0)
		goto error;

	return trans;

error:
	if (csocket)
		sock_release(csocket);

	kfree(trans);
	return ERR_PTR(err);
}
Ejemplo n.º 12
0
int lb_sendmsg (char *msgdata, int size)
{
  int len;
  struct msghdr msg;
  struct iovec iov;
  mm_segment_t oldfs;
  struct sockaddr_in to;

 /* initialize and setup socket to send messages to bare */
  printk(KERN_DEBUG "LB_SOCKET T101  start: lb_sendmsg() msg: %s \n", msgdata);
  if( sock_create( PF_INET,SOCK_DGRAM,IPPROTO_UDP,&clientsocket)<0 ){
    printk( KERN_DEBUG "LB_SOCKET: lb_sendmsg()  TERROR001: server: Error creating clientsocket \n" );
    return -EIO;
   }

  memset(&to,0, sizeof(to));
  to.sin_family = AF_INET;
  to.sin_addr.s_addr = in_aton(ipaddr); 
      /* bare PC destination address */
  to.sin_port = htons( (unsigned short) SERVERPORT );
  memset(&msg,0,sizeof(msg));
  msg.msg_name = &to;
  msg.msg_namelen = sizeof(to);
  iov.iov_base = msgdata;
  iov.iov_len  = size;
  msg.msg_control = NULL;
  msg.msg_controllen = 0;
  msg.msg_iov    = &iov;
  msg.msg_iovlen = 1;
  oldfs = get_fs();
  set_fs( KERNEL_DS );
  len = sock_sendmsg( clientsocket, &msg, size );
  set_fs( oldfs );

  /* close socket */
  if( clientsocket )
    {
    /*msleep_interruptible(HZ*2);*/
    sock_release( clientsocket );
    printk(KERN_DEBUG "LB_SOCKET T102  close socket: lb_sendmsg() \n");
    if( com_thread_pid ) {
      kill_proc_info( com_thread_pid, SIGTERM, 0 );
      wait_for_completion( &threadcomplete );
      }
    } 

  printk(KERN_DEBUG "LB_SOCKET T103  end: lb_sendmsg() \n");

  return len;
}
Ejemplo n.º 13
0
static struct sockaddr_in *new_addr(char *addr, unsigned short port)
{
	struct sockaddr_in *sin;

	sin = um_kmalloc(sizeof(struct sockaddr_in));
	if(sin == NULL){
		printk("new_addr: allocation of sockaddr_in failed\n");
		return NULL;
	}
	sin->sin_family = AF_INET;
	sin->sin_addr.s_addr = in_aton(addr);
	sin->sin_port = htons(port);
	return sin;
}
Ejemplo n.º 14
0
/* Initialize the rest of the LOOPBACK device. */
int loopback_init(struct device *dev)
{
	int i;

	dev->mtu		= LOOPBACK_MTU;
	dev->tbusy		= 0;
	dev->hard_start_xmit	= loopback_xmit;
	dev->hard_header	= eth_header;
	dev->hard_header_len	= ETH_HLEN;		/* 14			*/
	dev->addr_len		= ETH_ALEN;		/* 6			*/
	dev->tx_queue_len	= 50000;		/* No limit on loopback */
	dev->type		= ARPHRD_LOOPBACK;	/* 0x0001		*/
	dev->rebuild_header	= eth_rebuild_header;
	dev->open		= loopback_open;
	dev->flags		= IFF_LOOPBACK|IFF_BROADCAST;
	dev->family		= AF_INET;
#ifdef CONFIG_INET    
	dev->pa_addr		= in_aton("127.0.0.1");
	dev->pa_brdaddr		= in_aton("127.255.255.255");
	dev->pa_mask		= in_aton("255.0.0.0");
	dev->pa_alen		= 4;
#endif  
	dev->priv = kmalloc(sizeof(struct enet_statistics), GFP_KERNEL);
	if (dev->priv == NULL)
			return -ENOMEM;
	memset(dev->priv, 0, sizeof(struct enet_statistics));
	dev->get_stats = get_stats;

	/*
	 *	Fill in the generic fields of the device structure. 
	 */
   
	for (i = 0; i < DEV_NUMBUFFS; i++)
		skb_queue_head_init(&dev->buffs[i]);
  
	return(0);
};
Ejemplo n.º 15
0
__initfunc(int whitehole_init(struct device *dev))
{
	dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL);
	if (dev->priv == NULL)
		return -ENOBUFS;
	memset(dev->priv, 0, sizeof(struct net_device_stats));
	dev->get_stats	= whitehole_get_stats;
	dev->hard_start_xmit = whitehole_xmit;
	dev->open = whitehole_open;
	dev->stop = whitehole_close;
	ether_setup(dev);
	dev->tx_queue_len = 0;
	dev->flags |= IFF_NOARP;
	dev->flags &= ~(IFF_BROADCAST|IFF_MULTICAST);
	dev->iflink = 0;
	whitehole_iph.ihl = 5;
	whitehole_iph.version = 4;
	whitehole_iph.ttl = 2;
	whitehole_iph.saddr = in_aton("193.233.7.21");
	whitehole_iph.daddr = in_aton("193.233.7.10");
	whitehole_iph.tot_len = htons(20);
	whitehole_iph.check = ip_compute_csum((void *)&whitehole_iph, 20);
	return 0;
}
Ejemplo n.º 16
0
void send_answer(struct work_struct *data){
        // reader rtp_q, get istream and reader from container_of(data)
        // queue bytes on corresponding kfifo
	struct  wq_wrapper *foo;
	int len;
        if(in_interrupt()) printk("udpsrvcallback: in interrupt3\n");
        if(in_atomic()) printk("udpsrvcallback: in atomic3\n");
	foo = container_of(data, struct  wq_wrapper, worker);
	/* as long as there are messages in the receive queue of this socket*/
	while((len = skb_queue_len(&foo->sk->sk_receive_queue)) > 0){
		struct sk_buff *skb = NULL;
		unsigned short * port;
		int len;
		struct msghdr msg;
		struct iovec iov;
		mm_segment_t oldfs;
		struct sockaddr_in to;

		/* receive packet */
		skb = skb_dequeue(&foo->sk->sk_receive_queue);
		printk("message len: %i message: %s\n", skb->len - 8, skb->data+8); /*8 for udp header*/

		/* generate answer message */
		memset(&to,0, sizeof(to));
		to.sin_family = AF_INET;
		to.sin_addr.s_addr = in_aton("10.31.5.84");  
		port = (unsigned short *)skb->data;
		to.sin_port = *port;
		memset(&msg,0,sizeof(msg));
		msg.msg_name = &to;
		msg.msg_namelen = sizeof(to);
		/* send the message back */
		iov.iov_base = skb->data+8;
		iov.iov_len  = skb->len-8;
		msg.msg_control = NULL;
		msg.msg_controllen = 0;
		msg.msg_iov = &iov;
		msg.msg_iovlen = 1;
		/* adjust memory boundaries */	
		oldfs = get_fs();
		set_fs(KERNEL_DS);
		len = sock_sendmsg(clientsocket, &msg, skb->len-8);
		set_fs(oldfs);
		/* free the initial skb */
		kfree_skb(skb);
	}
}
Ejemplo n.º 17
0
int  init_module(void)
{

  struct sockaddr_in*   dest = {0};
  int                   retVal = 0;
  char buf[bufsize];
  int i;


  dest = (struct sockaddr_in*)kmalloc(sizeof(struct sockaddr_in), GFP_KERNEL);
  sock_create(AF_INET, SOCK_STREAM, IPPROTO_TCP, &sock);
  dest->sin_family = AF_INET;
  dest->sin_addr.s_addr = in_aton(IP);
  dest->sin_port = htons(port);
  printk(KERN_EMERG "Connect to %X:%u\n", dest->sin_addr.s_addr, port);

  retVal = sock->ops->connect(sock, (struct sockaddr*)dest, sizeof(struct sockaddr_in), 0);

	for(i=0;i<50;i++)
	{
		buf[i] = 'a';  // 設定欲傳送的資料到 buff
	}
	for(i=50;i<100;i++)
	{
		buf[i]='x';
	}	
	//printk("buf=%s\n",buf);
  if (retVal >= 0) {
   printk(KERN_EMERG "Connected\n");
	// transfer_data(sock);
	send(sock,buf,bufsize);
   	memset(buf, '\0', sizeof(buf));
	receive(sock,buf,bufsize/2);
	printk("Client : receive data is %s\n",buf);
   }
  else
    printk(KERN_EMERG "Error %d\n", -retVal); 
 
  
  return (0);
sock_release(sock);

/*out:
  sock_release(sock);	
  return (0);
*/
}
Ejemplo n.º 18
0
static int __init client_init( void )
{
  int len;
  char buf[64];
  struct msghdr msg;
  struct iovec iov;
  mm_segment_t oldfs;
  struct sockaddr_in to;
  printk(KERN_ERR "sendthread initialized\n");
  if( sock_create( PF_INET,SOCK_DGRAM,IPPROTO_UDP,&clientsocket)<0 ){
    printk( KERN_ERR "server: Error creating clientsocket.n" );
    return -EIO;
   }
  memset(&to,0, sizeof(to));
  to.sin_family = AF_INET;
  to.sin_addr.s_addr = in_aton( "127.0.0.1" );  
      /* destination address */
  to.sin_port = htons( (unsigned short)
      SERVERPORT );
  memset(&msg,0,sizeof(msg));
  msg.msg_name = &to;
  msg.msg_namelen = sizeof(to);
  memcpy( buf, "hallo from kernel space", 24 );
  iov.iov_base = buf;
  iov.iov_len  = 24;
  msg.msg_control = NULL;
  msg.msg_controllen = 0;
  msg.msg_iov    = &iov;
  msg.msg_iovlen = 1;
  // msg.msg_flags    = MSG_NOSIGNAL;
  printk(KERN_ERR " vor send\n");
  oldfs = get_fs();
  set_fs( KERNEL_DS );

	int i = 0;
	while ( i < 10){
		i++;
  		len = sock_sendmsg( clientsocket, &msg, 24 );
	}
//  len = sock_sendmsg( clientsocket, &msg, 24 );
  //len = sock_sendmsg( clientsocket, &msg, 24 );
  //len = sock_sendmsg( clientsocket, &msg, 24 );
  set_fs( oldfs );
  printk( KERN_ERR "sock_sendmsg returned: %d\n", len);
  return 0;
}
static struct sockaddr_in *new_addr(char *addr, unsigned short port)
{
	struct sockaddr_in *sin;

	sin = uml_kmalloc(sizeof(struct sockaddr_in), UM_GFP_KERNEL);
	if (sin == NULL) {
		printk(UM_KERN_ERR "new_addr: allocation of sockaddr_in "
		       "failed\n");
		return NULL;
	}
	sin->sin_family = AF_INET;
	if (addr)
		sin->sin_addr.s_addr = in_aton(addr);
	else
		sin->sin_addr.s_addr = INADDR_ANY;
	sin->sin_port = htons(port);
	return sin;
}
Ejemplo n.º 20
0
void dhd_blog(char *cp, int size)
{
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29))
	static struct socket * _udpSocket = NULL;
	struct sockaddr_in _saAddr;
	struct iovec iov;
	struct msghdr msg;
	if (sock_create(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &_udpSocket) >= 0)
	{

		{
			memset(&_saAddr, 0, sizeof(_saAddr));
			_saAddr.sin_family      = AF_INET;
			_saAddr.sin_port        = htons(7651);
			_saAddr.sin_addr.s_addr = in_aton("10.19.74.43");

			iov.iov_base = cp;
			iov.iov_len = size;

			msg.msg_name = &_saAddr;
			msg.msg_namelen = sizeof(struct sockaddr_in);
			msg.msg_iov = &iov;
			msg.msg_iovlen = 1;
			msg.msg_control = NULL;
			msg.msg_controllen = 0;
			msg.msg_flags = 0;

			{
				mm_segment_t fs = get_fs();
				set_fs(get_ds());

				sock_sendmsg(_udpSocket, &msg, size);

				set_fs(fs);
			}
		}

		sock_release(_udpSocket);
	}
#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25)) */
}
Ejemplo n.º 21
0
/*Send the packet structure using the kernel structures for io vectors.*/
static void send_it(packet_t* pkt)
{
  struct msghdr msg;
  mm_segment_t oldfs;
  struct iovec iov;
  struct sockaddr_in addr;
  int status;

  addr.sin_family = AF_INET;
  addr.sin_addr.s_addr = in_aton(sink_ip);
  addr.sin_port = htons(sink_port);

  /*The message name is just the memory address of destination address...*/
  msg.msg_name = &addr;
  msg.msg_namelen = sizeof(struct sockaddr_in);
  msg.msg_iov = &iov;
  msg.msg_iovlen = 1;
  msg.msg_control = NULL;
  msg.msg_controllen = 0;
  msg.msg_flags = MSG_NOSIGNAL;

  iov.iov_base = pkt; /* Put the data in the message */
  iov.iov_len = (__kernel_size_t) sizeof(*pkt);

  /*Remove this and you'll regret it. I'm serious, removing this can corrupt the files on the sd card.
   *It can even corrupt the Debian installation.
   */
  oldfs = get_fs();
  set_fs(KERNEL_DS);

#ifdef __DEBUG__
  printk(KERN_INFO "Sending packet to %s:%d\n", sink_ip, sink_port);
#endif

  if((status = sock_sendmsg(udp_socket, &msg, (size_t) sizeof(*pkt))) < 0)
    {
      printk(KERN_EMERG "FAILED TO SEND MESSAGE THROUGH SOCKET. ERROR %d\n", -status);
    }
  set_fs(oldfs);
}
static ssize_t cse536_write(struct file *file, const char *buf,size_t count, loff_t * ppos)
{	
	char data[256], address[16];

	if ( buf[0] == 1 ) {	// data contains ip address
		// address starts at byte 2
		memcpy(address, buf+1, 16);
		printk("cse536_write - setting address: %s\n", address);
		cse536_daddr = in_aton(address);
	}
	else
	{
		// initialize data memory to zeros
		memset(data, 0, 256);
		// copy write buffer to data array, data starts at 2nd byte in buffer
		memcpy(data, buf+1, count);
		printk("cse536_write - sending message: %s\n", data);
		cse536_sendmsg(data, count);
	}
	printk("cse536_write1: %s\n", buf);
	return -1;
}
Ejemplo n.º 23
0
static int __init custom_init_module(void)
{
    int ret = 0;

      outside_ip = in_aton(masq_ip);
      if(outside_ip == 0){
                printk("Error: try 'insmod eipnat.ko masq_ip=\"1.1.1.1\"'\n");
                return -1;
      }

      printk("masq_ip = %s/%x\n", masq_ip, ntohl(outside_ip));
      printk("nic_name= %s\n", nic_name);

 
    ret = nf_register_hooks(myhook_ops, ARRAY_SIZE(myhook_ops));
    if(ret < 0){
	return -1;
    }

    printk(KERN_INFO "init_module() called\n");
    return 0;
}
Ejemplo n.º 24
0
int main(int argc,char **argv)
{
    if (argc < 3) {
	printf("Syntax :\n    %s local_ip slip_tty\n",argv[0]);
	exit(3);
    }

    debug("KTCP: Mark 1.\n");
    local_ip = in_aton(argv[1]);

    debug("KTCP: Mark 2.\n");
    if((tcpdevfd = tcpdev_init("/dev/tcpdev")) < 0)
	exit(1);

    debug("KTCP: Mark 3.\n");
    if ((sfd = slip_init(argv[2])) < 0)
	exit(2);

    debug("KTCP: Mark 4.\n");
    ip_init();

    debug("KTCP: Mark 5.\n");
    icmp_init();

    debug("KTCP: Mark 6.\n");
    tcp_init();

    debug("KTCP: Mark 7.\n");
    netconf_init();

    debug("KTCP: Mark 8.\n");
    ktcp_run();

    debug("KTCP: Mark 9.\n");
    exit(0);
}
Ejemplo n.º 25
0
static int __init init(void)
{
    printk(KERN_INFO "nf_nat_rtsp v" IP_NF_RTSP_VERSION " loading\n");

    BUG_ON(nf_nat_rtsp_hook);
    nf_nat_rtsp_hook = help;
    nf_nat_rtsp_hook_expectfn = &expected;

    if (stunaddr != NULL)
        extip = in_aton(stunaddr);

    if (destaction != NULL) {
        if (strcmp(destaction, "auto") == 0)
            dstact = DSTACT_AUTO;

        if (strcmp(destaction, "strip") == 0)
            dstact = DSTACT_STRIP;

        if (strcmp(destaction, "none") == 0)
            dstact = DSTACT_NONE;
    }

    return 0;
}
Ejemplo n.º 26
0
static int _omni_sock_create_multicast_reader(struct socket **sock, const char *mc_ipaddr, const int mc_port, const char *local_if, const char *source_addr)
{
	struct sockaddr_in *psockaddr = NULL, sockaddr;
	int ret = -1;

	ret = sock_create_udp(sock);
	if( ret == -1 )
		return -1;

	/* bind with local interface, and get local interface ipaddr */
	if( local_if )
	{
		/* get ipaddress by interface */
		//psockaddr = (struct sockaddr_in *) &(ifr.ifr_ifru.ifru_addr);
		struct net_device *netdev = NULL;
		struct in_device *pdev_ipaddr = NULL;
#if 0
		netdev = dev_get_by_name(local_if);
#else
		/* version > 2.6.24 */
		netdev = dev_get_by_name(&init_net, local_if);
#endif
		pdev_ipaddr = (struct in_device *)netdev->ip_ptr;
		sockaddr.sin_addr.s_addr = pdev_ipaddr->ifa_list->ifa_local;
		psockaddr = &sockaddr;
	//	printk("==== %s : 0x%x\n", local_if, pdev_ipaddr->ifa_list->ifa_local);
	}

	/* set loop back enabale */
	{
		int loop = 1;
		if( -1 == _omni_sock_setsockopt(*sock, IPPROTO_IP, IP_MULTICAST_LOOP, (char*)&loop, sizeof(loop) ) )
		{
			goto err_out;
		}
	}

	/* join in member*/
	if( !source_addr )
	{
		/* join in membership */
		struct ip_mreq mreq;
		memset(&mreq, 0, sizeof(struct ip_mreq));
		mreq.imr_multiaddr.s_addr =  in_aton(mc_ipaddr);
		if( psockaddr )
			mreq.imr_interface.s_addr = psockaddr->sin_addr.s_addr;
		else
			mreq.imr_interface.s_addr = htonl(INADDR_ANY);

		if( -1 == _omni_sock_setsockopt(*sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mreq, sizeof(mreq)) )
		{
			goto err_out;
		}
	}else
	{
		/* join in source_membership */
		struct ip_mreq_source mc_req;
		memset(&mc_req, 0, sizeof(struct ip_mreq_source));
		mc_req.imr_multiaddr =  in_aton(mc_ipaddr);
		if( psockaddr )
			mc_req.imr_interface = psockaddr->sin_addr.s_addr;
		else
			mc_req.imr_interface = htonl(INADDR_ANY);

		mc_req.imr_sourceaddr = in_aton(source_addr);
		if( -1 == _omni_sock_setsockopt(*sock, IPPROTO_IP, IP_ADD_SOURCE_MEMBERSHIP, (char *)&mc_req, sizeof(mc_req)) )
		{
			goto err_out;
		}
	}

	/* bind with multicast ip */
	if( -1 == _omni_sock_bind_localaddr(*sock, mc_ipaddr, mc_port) )
	{
		goto err_out;
	}

	return 0;
err_out:
	sock_release(*sock);
	return -1;
}
Ejemplo n.º 27
0
int main(int argc, char *argv[]) {
  static char outbuf[200];
  char inbuf[200];
  char hostname[200];
  const char* nameserver;
  unsigned char *qname;
  int query_type;  
  int fd,rc,i;
  struct sockaddr_in addr;  
  struct DNS_HEADER *dns = NULL;
  struct QUESTION *qinfo = NULL;

  printf("Please enter hostname to lookup : ");
  scanf("%s" , hostname);
  
  if ( (fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    perror("socket error");
    exit(-1);
  }
  memset(&addr, 0, sizeof(addr));

  addr.sin_family = AF_INET;
  addr.sin_port = 0; /* any port */
  addr.sin_addr.s_addr = INADDR_ANY;

  if (bind(fd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in))==-1) {
        perror("Bind failed");
	exit(1);
  }
  
  addr.sin_family = AF_INET;
  nameserver=get_dns_server();
  printf("Nameserver queried:%s\n",nameserver);
  addr.sin_addr.s_addr = in_aton(nameserver); 
  addr.sin_port = htons(53);
  
  if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
    perror("connect error");
    close(fd);
    exit(-1);
  }

  dns = (struct DNS_HEADER *)&outbuf;
  /*dns->len:  set at end */
  dns->id = (__u16) htons(getpid());
  dns->flags = 0x01; /*This is a standard query */
  dns->q_count = htons(1); /*we have only 1 question */
  dns->ans_count = 0;
  dns->auth_count = 0;
  dns->add_count = 0;
       
  qname =(unsigned char*)&outbuf[sizeof(struct DNS_HEADER)];   /*point to the query portion */
    
  ChangetoDnsNameFormat(qname , hostname);
    
  qinfo =(struct QUESTION*)&outbuf[sizeof(struct DNS_HEADER) + (strlen((const char*)qname) + 1)]; /*fill it */
  query_type=1; /*IPv4 address */
  qinfo->qtype = htons(query_type); 
  qinfo->qclass = htons(1); /* internet */
 
  dns->len = (sizeof(struct DNS_HEADER) + strlen((const char*)qname) + sizeof(struct QUESTION) -1) * 0x0100;
  
  rc = write(fd, outbuf, dns->len+1); 
      
  if (rc < 0) {
        perror("write error");
	close(fd);
        exit(-1);
    }

  bzero( inbuf, sizeof(inbuf));  
  rc=read(fd,inbuf,200);
  //printf("\n%d bytes read\n",rc);
  //for (i=0;i<50;i++) printf("%2X,",inbuf[i]);
  printf("%s has the ip address: ",hostname);
  printf("%d.%d.%d.%d\n",inbuf[rc-4],inbuf[rc-3],inbuf[rc-2],inbuf[rc-1]);
  
  close(fd);
  return 0;
}
Ejemplo n.º 28
0
/**
 * nfs_follow_referral - set up mountpoint when hitting a referral on moved error
 * @mnt_parent - mountpoint of parent directory
 * @dentry - parent directory
 * @locations - array of NFSv4 server location information
 *
 */
static struct vfsmount *nfs_follow_referral(const struct vfsmount *mnt_parent,
                        const struct dentry *dentry,
                        const struct nfs4_fs_locations *locations)
{
    struct vfsmount *mnt = ERR_PTR(-ENOENT);
    struct nfs_clone_mount mountdata = {
        .sb = mnt_parent->mnt_sb,
        .dentry = dentry,
        .authflavor = NFS_SB(mnt_parent->mnt_sb)->client->cl_auth->au_flavor,
    };
    char *page = NULL, *page2 = NULL;
    unsigned int s;
    int loc, error;

    if (locations == NULL || locations->nlocations <= 0)
        goto out;

    dprintk("%s: referral at %s/%s\n", __func__,
        dentry->d_parent->d_name.name, dentry->d_name.name);

    page = (char *) __get_free_page(GFP_USER);
    if (!page)
        goto out;

    page2 = (char *) __get_free_page(GFP_USER);
    if (!page2)
        goto out;

    /* Ensure fs path is a prefix of current dentry path */
    error = nfs4_validate_fspath(mnt_parent, dentry, locations, page, page2);
    if (error < 0) {
        mnt = ERR_PTR(error);
        goto out;
    }

    loc = 0;
    while (loc < locations->nlocations && IS_ERR(mnt)) {
        const struct nfs4_fs_location *location = &locations->locations[loc];
        char *mnt_path;

        if (location == NULL || location->nservers <= 0 ||
            location->rootpath.ncomponents == 0) {
            loc++;
            continue;
        }

        mnt_path = nfs4_pathname_string(&location->rootpath, page2, PAGE_SIZE);
        if (IS_ERR(mnt_path)) {
            loc++;
            continue;
        }
        mountdata.mnt_path = mnt_path;

        s = 0;
        while (s < location->nservers) {
            struct sockaddr_in addr = {
                .sin_family    = AF_INET,
                .sin_port    = htons(NFS_PORT),
            };

            if (location->servers[s].len <= 0 ||
                valid_ipaddr4(location->servers[s].data) < 0) {
                s++;
                continue;
            }

            mountdata.hostname = location->servers[s].data;
            addr.sin_addr.s_addr = in_aton(mountdata.hostname),
            mountdata.addr = (struct sockaddr *)&addr;
            mountdata.addrlen = sizeof(addr);

            snprintf(page, PAGE_SIZE, "%s:%s",
                    mountdata.hostname,
                    mountdata.mnt_path);

            mnt = vfs_kern_mount(&nfs4_referral_fs_type, 0, page, &mountdata);
            if (!IS_ERR(mnt)) {
                break;
            }
            s++;
        }
        loc++;
    }

out:
    free_page((unsigned long) page);
    free_page((unsigned long) page2);
    dprintk("%s: done\n", __func__);
    return mnt;
}

/*
 * nfs_do_refmount - handle crossing a referral on server
 * @dentry - dentry of referral
 * @nd - nameidata info
 *
 */
struct vfsmount *nfs_do_refmount(const struct vfsmount *mnt_parent, struct dentry *dentry)
{
    struct vfsmount *mnt = ERR_PTR(-ENOMEM);
    struct dentry *parent;
    struct nfs4_fs_locations *fs_locations = NULL;
    struct page *page;
    int err;

    /* BUG_ON(IS_ROOT(dentry)); */
    dprintk("%s: enter\n", __func__);

    page = alloc_page(GFP_KERNEL);
    if (page == NULL)
        goto out;

    fs_locations = kmalloc(sizeof(struct nfs4_fs_locations), GFP_KERNEL);
    if (fs_locations == NULL)
        goto out_free;

    /* Get locations */
    mnt = ERR_PTR(-ENOENT);

    parent = dget_parent(dentry);
    dprintk("%s: getting locations for %s/%s\n",
        __func__, parent->d_name.name, dentry->d_name.name);

    err = nfs4_proc_fs_locations(parent->d_inode, &dentry->d_name, fs_locations, page);
    dput(parent);
    if (err != 0 ||
        fs_locations->nlocations <= 0 ||
        fs_locations->fs_path.ncomponents <= 0)
        goto out_free;

    mnt = nfs_follow_referral(mnt_parent, dentry, fs_locations);
out_free:
    __free_page(page);
    kfree(fs_locations);
out:
    dprintk("%s: done\n", __func__);
    return mnt;
}
Ejemplo n.º 29
0
static int p9_rdma_bind_privport(struct p9_trans_rdma *rdma)
{
	struct sockaddr_in cl = {
		.sin_family = AF_INET,
		.sin_addr.s_addr = htonl(INADDR_ANY),
	};
	int port, err = -EINVAL;

	for (port = P9_DEF_MAX_RESVPORT; port >= P9_DEF_MIN_RESVPORT; port--) {
		cl.sin_port = htons((ushort)port);
		err = rdma_bind_addr(rdma->cm_id, (struct sockaddr *)&cl);
		if (err != -EADDRINUSE)
			break;
	}
	return err;
}

/**
 * trans_create_rdma - Transport method for creating atransport instance
 * @client: client instance
 * @addr: IP address string
 * @args: Mount options string
 */
static int
rdma_create_trans(struct p9_client *client, const char *addr, char *args)
{
	int err;
	struct p9_rdma_opts opts;
	struct p9_trans_rdma *rdma;
	struct rdma_conn_param conn_param;
	struct ib_qp_init_attr qp_attr;
	struct ib_device_attr devattr;
	struct ib_cq_init_attr cq_attr = {};

	/* Parse the transport specific mount options */
	err = parse_opts(args, &opts);
	if (err < 0)
		return err;

	/* Create and initialize the RDMA transport structure */
	rdma = alloc_rdma(&opts);
	if (!rdma)
		return -ENOMEM;

	/* Create the RDMA CM ID */
	rdma->cm_id = rdma_create_id(p9_cm_event_handler, client, RDMA_PS_TCP,
				     IB_QPT_RC);
	if (IS_ERR(rdma->cm_id))
		goto error;

	/* Associate the client with the transport */
	client->trans = rdma;

	/* Bind to a privileged port if we need to */
	if (opts.privport) {
		err = p9_rdma_bind_privport(rdma);
		if (err < 0) {
			pr_err("%s (%d): problem binding to privport: %d\n",
			       __func__, task_pid_nr(current), -err);
			goto error;
		}
	}

	/* Resolve the server's address */
	rdma->addr.sin_family = AF_INET;
	rdma->addr.sin_addr.s_addr = in_aton(addr);
	rdma->addr.sin_port = htons(opts.port);
	err = rdma_resolve_addr(rdma->cm_id, NULL,
				(struct sockaddr *)&rdma->addr,
				rdma->timeout);
	if (err)
		goto error;
	err = wait_for_completion_interruptible(&rdma->cm_done);
	if (err || (rdma->state != P9_RDMA_ADDR_RESOLVED))
		goto error;

	/* Resolve the route to the server */
	err = rdma_resolve_route(rdma->cm_id, rdma->timeout);
	if (err)
		goto error;
	err = wait_for_completion_interruptible(&rdma->cm_done);
	if (err || (rdma->state != P9_RDMA_ROUTE_RESOLVED))
		goto error;

	/* Query the device attributes */
	err = ib_query_device(rdma->cm_id->device, &devattr);
	if (err)
		goto error;

	/* Create the Completion Queue */
	cq_attr.cqe = opts.sq_depth + opts.rq_depth + 1;
	rdma->cq = ib_create_cq(rdma->cm_id->device, cq_comp_handler,
				cq_event_handler, client,
				&cq_attr);
	if (IS_ERR(rdma->cq))
		goto error;
	ib_req_notify_cq(rdma->cq, IB_CQ_NEXT_COMP);

	/* Create the Protection Domain */
	rdma->pd = ib_alloc_pd(rdma->cm_id->device);
	if (IS_ERR(rdma->pd))
		goto error;

	/* Cache the DMA lkey in the transport */
	rdma->dma_mr = NULL;
	if (devattr.device_cap_flags & IB_DEVICE_LOCAL_DMA_LKEY)
		rdma->lkey = rdma->cm_id->device->local_dma_lkey;
	else {
		rdma->dma_mr = ib_get_dma_mr(rdma->pd, IB_ACCESS_LOCAL_WRITE);
		if (IS_ERR(rdma->dma_mr))
			goto error;
		rdma->lkey = rdma->dma_mr->lkey;
	}

	/* Create the Queue Pair */
	memset(&qp_attr, 0, sizeof qp_attr);
	qp_attr.event_handler = qp_event_handler;
	qp_attr.qp_context = client;
	qp_attr.cap.max_send_wr = opts.sq_depth;
	qp_attr.cap.max_recv_wr = opts.rq_depth;
	qp_attr.cap.max_send_sge = P9_RDMA_SEND_SGE;
	qp_attr.cap.max_recv_sge = P9_RDMA_RECV_SGE;
	qp_attr.sq_sig_type = IB_SIGNAL_REQ_WR;
	qp_attr.qp_type = IB_QPT_RC;
	qp_attr.send_cq = rdma->cq;
	qp_attr.recv_cq = rdma->cq;
	err = rdma_create_qp(rdma->cm_id, rdma->pd, &qp_attr);
	if (err)
		goto error;
	rdma->qp = rdma->cm_id->qp;

	/* Request a connection */
	memset(&conn_param, 0, sizeof(conn_param));
	conn_param.private_data = NULL;
	conn_param.private_data_len = 0;
	conn_param.responder_resources = P9_RDMA_IRD;
	conn_param.initiator_depth = P9_RDMA_ORD;
	err = rdma_connect(rdma->cm_id, &conn_param);
	if (err)
		goto error;
	err = wait_for_completion_interruptible(&rdma->cm_done);
	if (err || (rdma->state != P9_RDMA_CONNECTED))
		goto error;

	client->status = Connected;

	return 0;

error:
	rdma_destroy_trans(rdma);
	return -ENOTCONN;
}
Ejemplo n.º 30
-1
bool validate_ipv4_address(const char *ip) {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
    __be32 result_;

    return (in4_pton(ip, strlen(ip), (__u8 *) &result_, '\0', NULL) == 1);
#else
    char           src_ip_[50];
    __be32 result_ = in_aton(ip);
    sprintf(src_ip_, "%d.%d.%d.%d", NIPQUAD(result_));
    src_ip_[strlen(ip)] = '\0';

    return strcmp(ip, src_ip_) == 0;
#endif
}