523 Commits

Author SHA1 Message Date
thompsa
d2572297a0 MFC: EtherIP support, adding gif interfaces to bridges. 2006-01-03 08:15:33 +00:00
suz
aa390870a7 MFC 1.57 (Raw IPv6 checksum must use the protocol number of the last header,
instread of the first next-header value)
2005-12-26 00:59:12 +00:00
suz
675445a4d6 MFC: sync with KAME regarding NDP
- introduced fine-grain-timer to manage ND-caches and IPv6 Multicast-Listeners
- supports Router-Preference <draft-ietf-ipv6-router-selection-07.txt>
- better prefix lifetime management
- more spec-comformant DAD advertisement
- updated RFC/internet-draft revisions
- renamed a macro IPV6_DADOUTPUT to IPV6_UNSPECSRC
- plugged a possible memory leak

	share/doc/IMPLEMENTATIONS	Rev.1.9
	sys/netinet/icmp6.h		Rev.1.20
	sys/netinet6/icmp6.c		Rev.1.69
	sys/netinet6/in6.c		Rev.1.57,58
	sys/netinet6/in6.h		Rev.1.41,42
	sys/netinet6/in6_ifattach.c	Rev.1.31
	sys/netinet6/in6_ifattach.h	Rev.1.7
	sys/netinet6/in6_src.c		Rev.1.36
	sys/netinet6/in6_var.h		Rev.1.27
	sys/netinet6/ip6_var.h		Rev.1.36
	sys/netinet6/ip6_output.c	Rev.1.99,100
	sys/netinet6/mld6.c		Rev.1.24,25
	sys/netinet6/mld6_var.h		Rev.1.7
	sys/netinet6/nd6.c		Rev.1.59,61,62
	sys/netinet6/nd6.h		Rev.1.21
	sys/netinet6/nd6_nbr.c		Rev.1.34,37,38,39
	sys/netinet6/nd6_rtr.c		Rev.1.30,31
2005-12-25 14:03:38 +00:00
suz
645f921931 MFC: changes malloc type (M_IPMADDR->M_IP6MADDR, M_IPMOPTS->M_IP6MOPTS, M_MRTABL
E->M_MRTABLE6)

 Rev.1.54 in6.c
 Rev.1.64 in6_pcb.c
 Rev.1.25 in6_var.h
 Rev.1.33 ip6_mroute.c
 Rev.1.98 ip6_output.c
 Rev.1.23 mld6.c
2005-12-25 12:44:12 +00:00
suz
d93ffc4d8d MFC Rev.1.68 (don't respond to NI_QTYPE_IPV4ADDR) 2005-12-25 12:21:55 +00:00
suz
6812ce3e6e MFC the following KAME sync work.
- fixed typos
  - improved some comment descriptions
  - use NULL, instead of 0, to denote a NULL pointer
  - avoid embedding a magic number in the code
  - use nd6log() instead of log() to record NDP-specific logs
  - nuked an unnecessay white space

  Revision  Path
  1.67      src/sys/netinet6/icmp6.c
  1.55      src/sys/netinet6/in6.c
  1.29      src/sys/netinet6/in6_ifattach.c
  1.56      src/sys/netinet6/nd6.c
  1.35      src/sys/netinet6/nd6_nbr.c
  1.29      src/sys/netinet6/nd6_rtr.c
2005-12-25 12:15:13 +00:00
suz
67f35192e6 MFC Rev 1.35
fixed a kernel crash at the initialization time of PIM-SM register interface
2005-12-11 06:18:42 +00:00
ume
90a9ef87c4 MFC 1.40: the response NS to a DAD NS was not sent correctly due to the
invalid destination address.
2005-12-09 02:50:40 +00:00
ru
539591f019 MFC: Use sparse initializers for "struct domain" and "struct protosw". 2005-11-16 10:31:23 +00:00
suz
2d7742d032 MFC: sync with KAME regarding the following clarification in RFC3542
- disable IPv6 operation if DAD fails for some EUI-64 link-local addresses.
   - export get_hw_ifid() (and rename it) as a subroutine for this process.

  Revision  Changes    Path
  1.30      +5 -6      src/sys/netinet6/in6_ifattach.c
  1.6       +1 -0      src/sys/netinet6/in6_ifattach.h
  1.36      +39 -2     src/sys/netinet6/nd6_nbr.c
2005-11-05 10:54:21 +00:00
suz
038918b0d7 MFC: added an ioctl option in kernel so that ndp/rtadvd can change some NDP-related kernel variables based on their configurations (RFC2461 p.43 6.2.1 mandates this for IPv6 routers)
Revision  Changes    Path
  1.56      +1 -0      src/sys/netinet6/in6.c
  1.26      +1 -0      src/sys/netinet6/in6_var.h
  1.57      +28 -0     src/sys/netinet6/nd6.c
  1.17      +21 -8     src/usr.sbin/ndp/ndp.8
  1.17      +31 -2     src/usr.sbin/ndp/ndp.c
  1.25      +30 -0     src/usr.sbin/rtadvd/config.c
2005-11-05 10:50:09 +00:00
suz
87d613294f MFC: supported an ndp command suboption to disable IPv6 in the given interface
src/sys/netinet6/ip6_input.c	1.84
  src/sys/netinet6/nd6.c	1.58
  src/sys/netinet6/nd6.h	1.20
  src/usr.sbin/ndp/ndp.8	1.18
  src/usr.sbin/ndp/ndp.c	1.20
2005-11-05 10:30:00 +00:00
ume
8ef01a29a8 MFC 1.3: AES counter mode uses 8byte IV, not 16 bytes. 2005-11-04 20:59:58 +00:00
ume
ff89e7db2a MFC: added a knob to enable path MTU discovery for multicast packets.
(by default, it is disabled)

	sys/netinet6/in6.h:		1.40
	sys/netinet6/in6_proto.c:	1.36
	sys/netinet6/ip6_mroute.c:	1.32
	sys/netinet6/ip6_var.h:		1.35
2005-11-04 20:55:31 +00:00
ume
53fa03c39a MFC:
- fix typo in comment.
- nuke unused code.

	sys/netinet6/icmp6.c:	1.66
	sys/netinet6/in6_src.c:	1.33
	sys/netinet6/in6_var.h:	1.24
	sys/netinet6/nd6.c:	1.54
	sys/netinet6/nd6_nbr.c:	1.32
	sys/netinet6/nd6_rtr.c:	1.28
2005-11-04 20:48:12 +00:00
ume
19fee94205 MFC 1.65: removed RFC1885-related code. it was obsoleted by RFC2463,
and the code was #ifdef'ed out for a long time.
2005-11-04 20:41:08 +00:00
ume
02e243b949 MFC 1.96: simplied the fix to FreeBSD-SA-04:06.ipv6. The previous
one worried too much even though we actually validate the parameters.
This code also is more compatible with other *BSDs, which do copyin
within setsockopt().
2005-11-04 20:35:14 +00:00
ume
d87e40fcf5 MFC: scope cleanup. with this change
- most of the kernel code will not care about the actual encoding of
  scope zone IDs and won't touch "s6_addr16[1]" directly.
- similarly, most of the kernel code will not care about link-local
  scoped addresses as a special case.
- scope boundary check will be stricter.  For example, the current
  *BSD code allows a packet with src=::1 and dst=(some global IPv6
  address) to be sent outside of the node, if the application do:
    s = socket(AF_INET6);
    bind(s, "::1");
    sendto(s, some_global_IPv6_addr);
  This is clearly wrong, since ::1 is only meaningful within a single
  node, but the current implementation of the *BSD kernel cannot
  reject this attempt.

	sys/net/if_gif.c:		1.53
	sys/net/if_spppsubr.c:		1.120
	sys/netinet/icmp6.h:		1.19
	sys/netinet/ip_carp.c:		1.28,1.29
	sys/netinet/ip_fw2.c:		1.107
	sys/netinet/tcp_subr.c:		1.230,1.231,1.235
	sys/netinet/tcp_usrreq.c:	1.125
	sys/netinet6/ah_core.c:		1.26
	sys/netinet6/icmp6.c:		1.63,1.64
	sys/netinet6/in6.c:		1.52
	sys/netinet6/in6.h:		1.38
	sys/netinet6/in6_cksum.c:	1.11
	sys/netinet6/in6_ifattach.c:	1.27
	sys/netinet6/in6_pcb.c:		1.63
	sys/netinet6/in6_proto.c:	1.33
	sys/netinet6/in6_src.c:		1.31,1.32
	sys/netinet6/in6_var.h:		1.22
	sys/netinet6/ip6_forward.c:	1.29
	sys/netinet6/ip6_input.c:	1.83
	sys/netinet6/ip6_mroute.c:	1.30
	sys/netinet6/ip6_output.c:	1.95
	sys/netinet6/ip6_var.h:		1.33
	sys/netinet6/ipsec.c:		1.43
	sys/netinet6/mld6.c:		1.21
	sys/netinet6/nd6.c:		1.50
	sys/netinet6/nd6_nbr.c:		1.30
	sys/netinet6/nd6_rtr.c:		1.27
	sys/netinet6/raw_ip6.c:		1.54
	sys/netinet6/route6.c:		1.12
	sys/netinet6/scope6.c:		1.13,1.14,1.15
	sys/netinet6/scope6_var.h:	1.5
	sys/netinet6/udp6_output.c:	1.23
	sys/netinet6/udp6_usrreq.c:	1.55
	sys/netkey/key.c:		1.72,1.73
2005-11-04 20:26:16 +00:00
ume
de9984125f MFC: always copy ip6_pktopt. remove needcopy and needfree
argument/structure member accordingly.

	sys/netinet6/ip6_output.c:	1.94
	sys/netinet6/ip6_var.h:		1.32
	sys/netinet6/raw_ip6.c:		1.53
	sys/netinet6/udp6_output.c:	1.22
2005-11-04 19:59:55 +00:00
ume
2946532b86 MFC: simplified udp6_output() and rip6_output(): do not override
in6p_outputopts at the entrance of the functions.  this trick was
necessary when we passed an in6 pcb to in6_embedscope(), within which
the in6p_outputopts member was used, but we do not use this kind of
interface any more.

	sys/netinet6/raw_ip6.c:		1.52
	sys/netinet6/udp6_output.c:	1.21
2005-11-04 19:57:31 +00:00
suz
e085cc468b MFC 1.59
statically configured IPv6 address is properly added/deleted now

Approved by: re(scottl)
2005-11-01 22:48:56 +00:00
suz
9108fa171c MFC Rev 1.60
perform NUD on an IPv6-aware point-to-point interface

Approved by: re(scottl)
2005-10-28 14:38:56 +00:00
suz
dff0767165 MFC rev 1.34
fixed a kernel crash when IPv6 PIM-SM routing is enabled and a PIM register message is received

Approved by: re(scottl)
2005-10-27 14:04:03 +00:00
suz
af06cff4f6 MFC 1.56 (added a missing unlock)
Approved by: re(scottl)
2005-10-20 11:49:25 +00:00
ume
a2ab4a826b MFC: be consistent on naming advanced API functions; use ip6_XXXpktopt(s).
sys/netinet6/ip6_output.c:	1.93
	sys/netinet6/ip6_var.h:		1.31
	sys/netinet6/mld6.c:		1.20
	sys/netinet6/raw_ip6.c:		1.51
	sys/netinet6/udp6_output.c:	1.20

Approved by:    re (scottl)
Committed at:   CBUG Meeting meets XCAST6 Festival
2005-10-09 06:51:11 +00:00
ume
c5c002ca03 MFC 1.92: NULL is not zero.
Approved by:    re (scottl)
Committed at:   CBUG Meeting meets XCAST6 Festival
2005-10-09 06:46:27 +00:00
ume
77e5d0b3fb MFC 1.49: do not hardcode if_mtu values in here, except for IFT_{ARC,FDDI} -
they need special handling.  makes it possible to take advantage of 9k ether
frames.

Approved by:    re (scottl)
Committed at:   CBUG Meeting meets XCAST6 Festival
2005-10-09 06:42:41 +00:00
ume
3c63662444 MFC: update comments:
- RFC2292bis -> RFC3542
    - typo fixes

	sys/netinet/icmp6.h		1.17
	sys/netinet/ip6.h:		1.14
	sys/netinet6/in6.h:		1.37
	sys/netinet6/ip6_input.c:	1.82
	sys/netinet6/ip6_mroute.h:	1.7
	sys/netinet6/ip6_output.c:	1.91

Approved by:    re (scottl)
Committed at:   CBUG Meeting meets XCAST6 Festival
2005-10-09 05:21:18 +00:00
delphij
780fed3f51 MFC (by andre)
| Use the correct mbuf type for MGET().
|
| Revision  Changes    Path
| 1.304     +1 -1      src/sys/netinet/ip_input.c
| 1.246     +1 -1      src/sys/netinet/ip_output.c
| 1.232     +1 -1      src/sys/netinet/tcp_subr.c
| 1.97      +1 -1      src/sys/netinet6/ip6_output.c

Approved by:	re (scottl)
2005-10-09 04:24:45 +00:00
thompsa
12b6d396b7 MFC: if_bridge.c, r1.21; if_ethersubr.c, r1.198; in6_ifattach.c, r1.28;
nd6.c, r1.55; nd6_nbr.c, r1.33

> Add support for multicast to the bridge and allow inet6 addresses to be
> assigned to the interface.
>
> IPv6 auto-configuration is disabled. An IPv6 link-local address has a
> link-local scope within one link, the spec is unclear for the bridge case and
> it may cause scope violation.
>
> An address can be assigned in the usual way;
>   ifconfig bridge0 inet6 xxxx:...
>
> Tested by:      bmah
> Reviewed by:    ume (netinet6)
> Approved by:    mlaier (mentor)

Approved by:	re (kensmith), mlaier (mentor)
2005-09-13 18:02:39 +00:00
rwatson
e13b2df854 Merge linux_ioctl.c:1.128 svr4_sockio.c:1.17 altq_cbq.c:1.3 if_oltr.c:1.38
if_pflog.c:1.14 if_pfsync.c:1.21 if_an.c:1.70 if_ar.c:1.72 if_arl.c:1.11
amrr.c:1.10 onoe.c:1.10 if_ath.c:1.101 awi.c:1.41 if_bfe.c:1.27
if_bge.c:1.93 if_cm_isa.c:1.7 smc90cx6.c:1.16 if_cnw.c:1.20 if_cp.c:1.25
if_cs.c:1.42 if_ct.c:1.26 if_cx.c:1.46 if_ed.c:1.256 if_em.c:1.68
if_en_pci.c:1.37 midway.c:1.66 if_ep.c:1.143 if_ex.c:1.58 if_fatm.c:1.20
if_fe.c:1.93 if_fwe.c:1.38 if_fwip.c:1.8 if_fxp.c:1.244 if_gem.c:1.33
if_hatm.c:1.25 if_hatm_intr.c:1.20 if_hatm_ioctl.c:1.13 if_hatm_rx.c:1.10
if_hatm_tx.c:1.14 if_hme.c:1.39 if_ie.c:1.104 if_ndis.c:1.101
if_ic.c:1.24 if_ipw.c:1.10 if_iwi.c:1.10 if_ixgb.c:1.13 if_lge.c:1.41
if_lnc.c:1.113 if_my.c:1.31 if_nge.c:1.77 if_nve.c:1.10 if_owi.c:1.12
if_patm.c:1.9 if_patm_intr.c:1.6 if_patm_ioctl.c:1.10 if_patm_tx.c:1.10
pdq_ifsubr.c:1.28 if_plip.c:1.38 if_ral.c:1.12 if_ral_pci.c:1.2
if_ray.c:1.81 if_rayvar.h:1.22 if_re.c:1.49 if_sbni.c:1.21 if_sbsh.c:1.14
if_sn.c:1.48 dp83932.c:1.21 if_snc_pccard.c:1.9 if_sr.c:1.70 if_tx.c:1.91
if_txp.c:1.33 if_aue.c:1.92 if_axe.c:1.32 if_cdce.c:1.8 if_cue.c:1.59
if_kue.c:1.66 if_rue.c:1.23 if_udav.c:1.16 if_ural.c:1.12 if_vge.c:1.16
if_vx.c:1.58 if_wi.c:1.185 if_wi_pci.c:1.26 if_wl.c:1.68 if_xe.c:1.60
if_xe_pccard.c:1.30 if_el.c:1.68 i4b_ipr.c:1.35 i4b_isppp.c:1.31
kern_poll.c:1.20 bridge.c:1.94 bridgestp.c:1.4 if_arcsubr.c:1.27
if_atm.h:1.24 if_atmsubr.c:1.40 if_bridge.c:1.16 if_ef.c:1.35
if_ethersubr.c:1.196 if_faith.c:1.37 if_fddisubr.c:1.100 if_fwsubr.c:1.14
if_gif.c:1.54 if_gre.c:1.34 if_iso88025subr.c:1.70 if_loop.c:1.107
if_ppp.c:1.106 if_spppsubr.c:1.121 if_tap.c:1.57 if_tun.c:1.154
if_vlan.c:1.80 ppp_tty.c:1.67 ieee80211_ioctl.c:1.32 atm_if.c:1.31
ng_eiface.c:1.33 ng_ether.c:1.50 ng_fec.c:1.19 ng_iface.c:1.44
ng_sppp.c:1.9 ip_carp.c:1.30 ip_fastfwd.c:1.30 in6.c:1.53 nd6_nbr.c:1.31
natm.c:1.40 if_dc.c:1.162 if_de.c:1.168 if_pcn.c:1.72 if_rl.c:1.154
if_sf.c:1.84 if_sis.c:1.135 if_sk.c:1.108 if_ste.c:1.86 if_ti.c:1.109
if_tl.c:1.101 if_vr.c:1.106 if_wb.c:1.81 if_xl.c:1.194 from HEAD to
RELENG_6:

  Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and
  IFF_DRV_RUNNING, as well as the move from ifnet.if_flags to
  ifnet.if_drv_flags.  Device drivers are now responsible for
  synchronizing access to these flags, as they are in if_drv_flags.  This
  helps prevent races between the network stack and device driver in
  maintaining the interface flags field.

  Many __FreeBSD__ and __FreeBSD_version checks maintained and continued;
  some less so.

  Reviewed by:    pjd, bz

Approved by:	re (scottl)
2005-08-25 05:01:24 +00:00
rwatson
8cc2738362 Merge in_var.h:1.54, in6_var.h:1.23, mld6.c:1.22 from HEAD to RELENG_6:
Modify network protocol consumers of the ifnet multicast address lists
  to lock if_addr_mtx.

  Problem reported by:    Ed Maste <emaste at phaedrus dot sandvine dot ca>

Approved by:	re (scottl)
2005-08-24 15:18:38 +00:00
suz
6bba028c03 MFC 1.55
added a missing unlock (just do the same thing as in netinet/raw_ip.c)

Approved by: re(scottl)
2005-08-24 06:46:16 +00:00
ume
b7cb727fcd MFC 1.34, 1.35:
- avoid exclusive sleep mutex witness warning using sx lock.
  - use TAILQ_FOREACH() for readability.

Approved by:	re (kensmith)
2005-08-20 12:20:48 +00:00
ume
b026cdd3cf MFC 1.36: create sysctl tree dynamically. it is required to share
net.inet6.ip6.fw with upcoming ipfw2 improvement for IPv6.

Requested by:	bz
Approved by:	re (kensmith)
2005-08-19 17:38:52 +00:00
glebius
6f71a877bf o Make rt_check() return a locked rtentry.
o Make rt_check() function more strict:
  - rt0 passed to rt_check() must not be NULL, assert this.
  - rt returned by rt_check() must be valid locked rtentry,
    if no error occured.
o Modify callers, so that they never pass NULL rt0
  to rt_check().
o Modify callers, so that they unlock rtentry.

Revisions merged:

net/if_atmsubr.c	- 1.39, 1.41
net/if_fwsubr.c		- 1.13, 1.15
net/if_iso88025subr.c	- 1.69, 1.71
net/route.c		- 1.110, 1.111
netinet6/nd6.c		- 1.51-1.53

netinet/if_ether.c intentionally not touched by this merge.

Approved by:	re (kensmith)
2005-08-18 10:12:42 +00:00
suz
922265190b MFC: IPv6 stealth forwarding
Revision  Changes    Path
   1.39      +3 -1      src/sys/netinet6/in6.h
   1.35      +8 -0      src/sys/netinet6/in6_proto.c
   1.30      +8 -0      src/sys/netinet6/ip6_forward.c
   1.34      +3 -0      src/sys/netinet6/ip6_var.h

PR: kern/54625
Approved by: re(kensmith)
2005-08-18 09:01:48 +00:00
suz
3fe0825ea6 MFC Rev. 1.31
fixed a kernel crash at the start-up time of an IPv6 multicast daemon
  (e.g. pim6sd/pim6dd)

Approved by: re(kensmith)
2005-08-15 00:28:31 +00:00
cperciva
bc436e7a70 Correct a buffer overflow which can occur when decompressing a
carefully crafted deflated data stream. [1]

Correct problems in the AES-XCBC-MAC IPsec authentication algorithm. [2]

Submitted by:   suz [2]
Security:       FreeBSD-SA-05:18.zlib [1], FreeBSD-SA-05:19.ipsec [2]
Approved by:	re (kensmith)
2005-07-27 08:41:44 +00:00
thompsa
d7e928629d Check the alignment of the IP header before passing the packet up to the
packet filter. This would cause a panic on architectures that require strict
alignment such as sparc64 (tier1) and ia64/ppc (tier2).

This adds two new macros that check the alignment, these are compile time
dependent on __NO_STRICT_ALIGNMENT which is set for i386 and amd64 where
alignment isn't need so the cost is avoided.

 IP_HDR_ALIGNED_P()
 IP6_HDR_ALIGNED_P()

Move bridge_ip_checkbasic()/bridge_ip6_checkbasic() up so that the alignment
is checked for ipfw and dummynet too.

PR:		ia64/81284
Obtained from:	NetBSD
Approved by:	re (dwhite), mlaier (mentor)
2005-07-02 23:13:31 +00:00
ume
38dbaac82e fix IP(v4) over IPv6 tunneling most likely broken with ifnet changes.
Submitted by:	bz
Approved by:	re (dwhite)
2005-06-20 20:17:00 +00:00
brooks
547b8204c4 Fix IPv6 neighbor discovery by using IF_LLADDR to get the mac address
instead of a particularly ugly cast + pointer math hack.

Reported by:	kuriyama, kris
2005-06-12 00:45:24 +00:00
brooks
567ba9b00a Stop embedding struct ifnet at the top of driver softcs. Instead the
struct ifnet or the layer 2 common structure it was embedded in have
been replaced with a struct ifnet pointer to be filled by a call to the
new function, if_alloc(). The layer 2 common structure is also allocated
via if_alloc() based on the interface type. It is hung off the new
struct ifnet member, if_l2com.

This change removes the size of these structures from the kernel ABI and
will allow us to better manage them as interfaces come and go.

Other changes of note:
 - Struct arpcom is no longer referenced in normal interface code.
   Instead the Ethernet address is accessed via the IFP2ENADDR() macro.
   To enforce this ac_enaddr has been renamed to _ac_enaddr.
 - The second argument to ether_ifattach is now always the mac address
   from driver private storage rather than sometimes being ac_enaddr.

Reviewed by:	sobomax, sam
2005-06-10 16:49:24 +00:00
iedowse
7de9a3957f Use IFF_LOCKGIANT/IFF_UNLOCKGIANT around calls to the interface
if_ioctl routine. This should fix a number of code paths through
soo_ioctl() that could call into Giant-locked network drivers without
first acquiring Giant.
2005-06-02 00:04:08 +00:00
rwatson
d32144e2d4 Lock udbinfo and inp before calling in6_pcbdetach() from udp6_abort().
MFC after:	1 week
2005-06-01 11:38:19 +00:00
gnn
c853caca3e Fixes for various nits found by the Coverity tool.
In particular 2 missed return values and an inappropriate bcopy from
a possibly NULL pointer.

Reviewed by:	jake
Approved by:	rwatson
MFC after:	1 week
2005-05-15 02:28:30 +00:00
brooks
f3ecaa630b Add IPv6 support to IPFW and Dummynet.
Submitted by:	Mariano Tortoriello and Raffaele De Lorenzo (via luigi)
2005-04-18 18:35:05 +00:00
gnn
8006d90653 Remove dead code which would never execute.
i.e. checking to see if a cluster was every less than 48 bytes,
    a rather unlikely case.

Check return value of m_dup_pkthdr() calls.

Found by: Coverity
Reviewed by: rwatson (mentor), Keiichi Shima (for Kame)
Approved by: rwatson (mentor)
2005-04-14 11:41:23 +00:00
sam
a2c73279e6 check for malloc failure (also move malloc up to simplify error recovery)
Noticed by:	Coverity Prevent analysis tool
Reviewed by:	gnn
2005-03-29 01:26:27 +00:00
glebius
d2dabbb47c ifma_protospec is a pointer. Use NULL when assigning or compating it. 2005-03-20 14:31:45 +00:00