ftp.nice.ch/pub/next/connectivity/protocol/GateKeeper.3.0.Beta.4.s.tar.gz#/GateKeeper.3.0.Beta.4.s/ppp/NeXT/bpf/promisc.c

This is promisc.c in view mode; [Download] [Up]

/*
 * Copyright (c) 1990 The Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that: (1) source code distributions
 * retain the above copyright notice and this paragraph in its entirety, (2)
 * distributions including binary code include the above copyright notice and
 * this paragraph in its entirety in the documentation or other materials
 * provided with the distribution, and (3) all advertising materials mentioning
 * features or use of this software display the following acknowledgement:
 * ``This product includes software developed by the University of California,
 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
 * the University nor the names of its contributors may be used to endorse
 * or promote products derived from this software without specific prior
 * written permission.
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 *
 * Modified to support NeXT's port of PPP-2.2.  Most work was to cover
 * our inability to modify a struct ifnet to contain an if_pcount
 * field.  The disgusting hack of using the PPP softc will cause
 * portability problems with other drivers. A more general solution
 * would be preferrable.  Stephen J. Perkins (perkins@cps.msu.edu)
 * 3/19/95
 *
 */

/*
 * Set/clear promiscuous mode on interface 'ifp' based on the truth value`
 * of pswitch.  The calls are reference counted so that only the first
 * 'on' request actually has an effect, as does the final 'off' request.
 * Results are undefined if the 'off' and 'on' requests are not matched.
 * This code works only with the BSD drivers.
 */

/*
 * All these includes are only necessary so that we can understand the 
 * the "private" data structure placed on the netif_t.  In the case
 * of PPP-2.2, this is a pointer to the ppp_softc structure.  We have
 * added an if_pcount variable there.
 */

#if !defined(lint)
static char sccsid[] = "$Revision: 1.2 $ ($Date: 1996/10/08 00:16:48 $)";
#endif /* not lint*/

#define KERNEL 1
#define KERNEL_FEATURES 1
#define INET 1

#include <sys/param.h>
#include <sys/proc.h>
#include <sys/user.h>
#include "netbuf.h"
#include <sys/socket.h>
#include <sys/ioctl.h>

#include <sys/errno.h>


#include <kernserv/prototypes.h>
#if defined(m68k)
#import "../spl.h"
#else
#include <driverkit/generalFuncs.h>
#import <kernserv/machine/spl.h>
#endif
#include <kernserv/kern_server_types.h>

#include <net/if.h>
#include <net/route.h>

#if INET
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/in_var.h>
#include <netinet/ip.h>
#endif


#include <net/ppp_defs.h>
#ifdef	VJC
#include <net/vjcompress.h>
#endif
#include <net/if_ppp.h>

#include "if_pppvar.h"

int
bpfifpromisc(ifp, pswitch)
	netif_t ifp;
	int pswitch;
{
  struct ppp_softc *sc = (struct ppp_softc *) if_private(ifp);

  /* 
   * If the device is not configured up, we cannot put it in
   * promiscuous mode.
   */
  if ((if_flags(ifp) & IFF_UP) == 0)
    return ENETDOWN;
  
  if (pswitch) {
    if (sc->if_pcount++ != 0)
      return 0;
    /* turn on driver */
    if_flags_set(ifp, if_flags(ifp) | IFF_PROMISC);
  } else {
    if (--sc->if_pcount > 0)
      return 0;
    /* turn off driver */
    if_flags_set(ifp, if_flags(ifp) & ~IFF_PROMISC);
  }
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Marcel Waldvogel and Netfuture.ch.