Annotation of embedaddon/libnet/src/libnet_link_nit.c, revision 1.1

1.1     ! misho       1: /*
        !             2:  *  $Id: libnet_link_nit.c,v 1.6 2004/01/03 20:31:02 mike Exp $
        !             3:  *
        !             4:  *  libnet
        !             5:  *  libnet_nit.c - network interface tap routines
        !             6:  *
        !             7:  *  Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
        !             8:  *  All rights reserved.
        !             9:  *
        !            10:  * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996
        !            11:  *     The Regents of the University of California.  All rights reserved.
        !            12:  *
        !            13:  * Redistribution and use in source and binary forms, with or without
        !            14:  * modification, are permitted provided that: (1) source code distributions
        !            15:  * retain the above copyright notice and this paragraph in its entirety, (2)
        !            16:  * distributions including binary code include the above copyright notice and
        !            17:  * this paragraph in its entirety in the documentation or other materials
        !            18:  * provided with the distribution, and (3) all advertising materials mentioning
        !            19:  * features or use of this software display the following acknowledgement:
        !            20:  * ``This product includes software developed by the University of California,
        !            21:  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
        !            22:  * the University nor the names of its contributors may be used to endorse
        !            23:  * or promote products derived from this software without specific prior
        !            24:  * written permission.
        !            25:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
        !            26:  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
        !            27:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        !            28:  */
        !            29: 
        !            30: #if (HAVE_CONFIG_H)
        !            31: #include "../include/config.h"
        !            32: #endif
        !            33: #if (!(_WIN32) || (__CYGWIN__)) 
        !            34: #include "../include/libnet.h"
        !            35: #else
        !            36: #include "../include/win32/libnet.h"
        !            37: #endif
        !            38: 
        !            39: #include "../include/gnuc.h"
        !            40: #ifdef HAVE_OS_PROTO_H
        !            41: #include "../include/os-proto.h"
        !            42: #endif
        !            43: 
        !            44: struct libnet_link_int *
        !            45: libnet_open_link_interface(int8_t *device, int8_t *ebuf)
        !            46: {
        !            47:     struct sockaddr_nit snit;
        !            48:     register struct libnet_link_int *l;
        !            49: 
        !            50:     l = (struct libnet_link_int *)malloc(sizeof(*p));
        !            51:     if (l == NULL)
        !            52:     {
        !            53:         strcpy(ebuf, strerror(errno));
        !            54:         return (NULL);
        !            55:     }
        !            56: 
        !            57:     memset(l, 0, sizeof(*l));
        !            58: 
        !            59:     l->fd = socket(AF_NIT, SOCK_RAW, NITPROTO_RAW);
        !            60:     if (l->fd < 0)
        !            61:     {
        !            62:         sprintf(ebuf, "socket: %s", strerror(errno));
        !            63:         goto bad;
        !            64:     }
        !            65:     snit.snit_family = AF_NIT;
        !            66:        strncpy(snit.snit_ifname, device, NITIFSIZ -1);
        !            67:     snit.snit_ifname[NITIFSIZ] = '\0';
        !            68: 
        !            69:     if (bind(l->fd, (struct sockaddr *)&snit, sizeof(snit)))
        !            70:     {
        !            71:         sprintf(ebuf, "bind: %s: %s", snit.snit_ifname, strerror(errno));
        !            72:         goto bad;
        !            73:     }
        !            74: 
        !            75:     /*
        !            76:      * NIT supports only ethernets.
        !            77:      */
        !            78:     l->linktype = DLT_EN10MB;
        !            79: 
        !            80:     return (l);
        !            81: 
        !            82: bad:
        !            83:     if (l->fd >= 0)
        !            84:     {
        !            85:         close(l->fd);
        !            86:     }
        !            87:     free(l);
        !            88:     return (NULL);
        !            89: }
        !            90: 
        !            91: 
        !            92: int
        !            93: libnet_close_link_interface(struct libnet_link_int *l)
        !            94: {
        !            95:     if (close(l->fd) == 0)
        !            96:     {
        !            97:         free(l);
        !            98:         return (1);
        !            99:     }
        !           100:     else
        !           101:     {
        !           102:         free(l);
        !           103:         return (-1);
        !           104:     }
        !           105: }
        !           106: 
        !           107: 
        !           108: int
        !           109: write_link_layer(struct libnet_link_int *l, const int8_t *device,
        !           110:             u_int8_t *buf, int len)
        !           111: {
        !           112:     int c;
        !           113:     struct sockaddr sa;
        !           114: 
        !           115:     memset(&sa, 0, sizeof(sa));
        !           116:     strncpy(sa.sa_data, device, sizeof(sa.sa_data));
        !           117: 
        !           118:     c = sendto(l->fd, buf, len, 0, &sa, sizeof(sa));
        !           119:     if (c != len)
        !           120:     {
        !           121:         /* error */
        !           122:     }
        !           123:     return (c);
        !           124: }
        !           125: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>