# FreeBSD 2004 年 5-6 月状态报告

原文地址：[FreeBSD 2004 年 5-6 月状态报告](https://www.freebsd.org/status/report-2004-05-2004-06.html)

## 简介

本期双月报告稍微晚了些，但我很高兴地说，它充满了 30 多篇文章。5 月和 6 月依旧是忙碌的月份；Netperf 项目达到了重大里程碑，现在可以在开启可调选项 `debug.mpsafenet` 的情况下，从 CVS 源代码中运行。ARM、MIPS 和 PPC 平台也取得了相当大的进展，另外一些 SMPng 和 Netgraph 项目也有了不小的进展。FreeBSD 5.3 就在眼前，因此不要犹豫，抓取一个快照并测试一下进展吧！

从更严肃的角度看，必须牢记 FreeBSD 5.3 的代码冻结日期将于 2004 年 8 月 15 日发生。这仅仅是几周后的事情，还有很多工作需要完成。发布的 TODO 列表可以在 <http://www.freebsd.org/releases/5.3R/todo.html> 中找到。如果你在寻找参与发布的方式，这个 TODO 列表中有几个项目是紧急且需要关注的。测试同样非常重要。过去几周，树形结构出现了一些稳定性问题，但已经有了可以让每个人继续测试和使用 FreeBSD 的解决方法。我们必须确保 FreeBSD 5.3 是一个非常稳定的版本，因此每一分贡献的努力都很重要！

谢谢，

Scott Long

## [FreeBSD 的蓝牙协议栈（Netgraph 实现）](https://www.freebsd.org/status/report-2004-05-2004-06.html#Bluetooth-stack-for-FreeBSD-\(Netgraph-implementation\))

联系人：Maksim Yevmenkin <<m_evmenkin@yahoo.com>>

蓝牙代码已标记为非 i386 特定。现在可以在所有受支持的平台上进行构建。请帮助进行测试。除此之外，过去几个月的进展不大。我一直很忙于现实生活中的事务。

## [导入 ALTQ](https://www.freebsd.org/status/report-2004-05-2004-06.html#ALTQ-import)

**链接**

[ALTQ 首页](http://www.csl.sony.co.jp/person/kjc/kjc/software.html#ALTQ)

[FreeBSD 项目中 ALTQ 的集成](http://www.rofug.ro/projects/freebsd-altq/)

<http://people.freebsd.org/~mlaier/ALTQ_driver/>

联系人：Max Laier <<mlaier@FreeBSD.org>>

ALTQ 框架是 KAME 的一部分，已经有 4 年多的历史，并且在 NetBSD 和 OpenBSD 中已经使用了 3 年多。它提供了管理外发数据包的手段，用于实现 QoS 和带宽限制。OpenBSD 开发了一种不同的方式来与 ALTQ 交互，使用 pf，这种方式被 KAME 采用为“日常使用的默认方式”。

罗马尼亚 FreeBSD 用户组曾有一个项目，致力于将 ALTQ 集成到 FreeBSD 中，这为最终的导入提供了一个非常好的起点。该导入仅提供了“pf 模式”配置和分类 API，因为旧的 ALTQ3 API 不适合我们的 SMP 方法。

正在开发一个重新设计的配置 API（与 pf 解耦）以及额外的驱动程序修改。两者都应该在 5-STABLE 分支之前完成，尽管额外的驱动程序也可以在 5-STABLE 生命周期中导入。

## [Buf Junta 项目](https://www.freebsd.org/status/report-2004-05-2004-06.html#Buf-Junta-project)

联系人：Poul-Henning Kamp <<phk@FreeBSD.org>>

buf-junta 项目正在进行中，我正在尝试将代码拆分，以便我们获得一个 `struct bufobj`，作为缓冲区缓存对象的句柄和方法承载体。所有的 vnodes 都包含一个 bufobj，但随着文件系统迁移到 GEOM 后端，可能会存在没有关联 vnode 的 bufobj。该工作仍在进行中。

## [CAM Lockdown](https://www.freebsd.org/status/report-2004-05-2004-06.html#CAM-Lockdown)

联系人：Scott Long <<scottl@freebsd.org>>

最近在这方面的编码工作不多，近期的重点是优化设计。我们目前正在研究每个 CPU 的完成队列和线程，以减少锁的使用并增加并发性。同时还在审查 BSD/OS 的 CAM 锁定，看看能共享哪些想法。希望在 7 月底工作能有所推进。开发工作目前在 FreeBSD Perforce 仓库的 `//depot/projects/scottl-camlock/...` 分支中进行。

## [Cronyx 适配器驱动](https://www.freebsd.org/status/report-2004-05-2004-06.html#Cronyx-Adapters-Drivers)

**链接**

[Cronyx WAN 适配器](http://www.cronyx.ru/hardware/wan.html)

联系人：Roman Kurakin <<rik@FreeBSD.org>>

已添加 Cronyx Tau-PCI 的 cp(4) 驱动程序。Cronyx Tau-PCI 是一系列同步 WAN 适配器，具有多种接口类型，如 V.35、RS-232、RS-530(449)、X.21、E1、E3、T3、STS-1。这是 FreeBSD 目前支持的第三个 Cronyx 适配器系列。现在，所有三个驱动程序 cx(4)、ctau(4) 和 cp(4) 都在两个主要分支（HEAD 和 RELENG\_4）中提供。

Busdma 转换最近完成。当前的工作集中在适配器驱动程序和 sppp 的锁定问题上（有关更多信息，请参阅我的其他报告）。

## [EuroBSDCon 2004 注册现已开放](https://www.freebsd.org/status/report-2004-05-2004-06.html#EuroBSDCon-2004-registration-now-open)

链接：

[EuroBSDCon 2004 官方网站](http://www.eurobsdcon2004.de/)

联系人：Patrick M. Hausen <<hausen@punkt.de>>

EuroBSDCon 2004 的现已开放注册，会议将在德国卡尔斯鲁厄于 10 月 29 日至 31 日举行。对于在 8 月 15 日之前注册的所有人员，将提供早鸟优惠。有关详细信息，请参阅会议官网。

## [FreeBSD 巴西文档项目](https://www.freebsd.org/status/report-2004-05-2004-06.html#FreeBSD-Brazilian-Documentation-Project)

**链接**

<http://doc.fugspbr.org>

<http://lists.fugspbr.org/listinfo.cgi/doc-fugspbr.org>

<http://developer.berlios.de/projects/doc-br/>

联系人：DOC-BR 讨论组 <<doc@fugspbr.org>>

FreeBSD 巴西文档项目是巴西 FreeBSD 用户组（FUG-BR）致力于将可用文档翻译成葡萄牙语（巴西）的努力。我们很高兴地宣布，我们已完成《手册》和《FDP Primer》的翻译工作，目前正在进行审阅。这两份文档很快将被集成到 FreeBSD 的 CVS 仓库中。

还有许多其他文章正在翻译中，你可以在我们的网站上查看它们的状态。如果你想提供帮助，请在 BerliOS 创建一个账户，因为我们的 CVS 仓库托管在那里，并通过我们的邮件列表与我们联系。任何帮助都欢迎！

## [FreeBSD 荷兰文档项目](https://www.freebsd.org/status/report-2004-05-2004-06.html#FreeBSD-Dutch-Documentation-Project)

**链接**

[预览 HTML 文档](http://www.evilcoder.org/freebsd_html)

[预览文档树](http://www.evilcoder.org/freebsd/handbook.tbz)

[预览 HTML 格式的 tbz 文件](http://www.evilcoder.org/freebsd/html.tbz)

联系人：Remko Lodder <<remko@elvandar.org>>

FreeBSD 荷兰文档项目是一个持续进行的项目，旨在将 FreeBSD 手册（及其他文档）翻译成荷兰语。我们仍在寻找翻译人员和愿意检查当前 HTML 文档的人。如果你有兴趣，请通过上述邮件地址与我联系。目前，我们正在进行一些检查工作，然后将第一批文档插入到文档树中。

## [FreeBSD 手册，第三版，第二卷：管理员指南](https://www.freebsd.org/status/report-2004-05-2004-06.html#FreeBSD-Handbook,-3rd-Edition,-Volume-II:-Administrator-Guide)

**链接**

[FreeBSD 手册第三版任务列表](http://www.freebsd.org/docproj/handbook3.html)

联系人：Murray Stokely <<murray@FreeBSD.org>>

FreeBSD 手册的第三版已被分为两卷。第一卷，即用户指南，已经发布。第二卷的工作正在进行中。第二卷包括以下章节：高级网络、网络服务器、配置、启动、前沿技术、磁盘、本地化、Mac、邮件、PPP 和 SLIP、安全、串行通信、用户、Vinum、电子资源、参考书目、镜像。请参阅任务列表以了解剩余的工作内容。除了技术和语法审查外，还需要纠正文档中关于 HTML 输出的若干假设。

## [FreeBSD ports 监控系统](https://www.freebsd.org/status/report-2004-05-2004-06.html#FreeBSD-ports-monitoring-system)

**链接**

[FreeBSD ports 监控系统](http://portsmon.firepipe.net/index.html)

联系人：Mark Linimon <<linimon_at_lonesome_dot_com>>

该系统继续运行良好。通过在 Makefile 中查找的 Port 名称上赋予更高的优先级，自动分类算法的准确性得到了提高。

由于从 bento 到 pointyhat 的过渡，修复了若干个错误。在大约两周的时间里，构建错误的链接错误。现已修正（但请注意，某些 pointyhat 汇总页面仍然显示断开的链接）。

增加了一份报告，显示处于“反馈”状态的 PR，这样提交者可以专注于维护者/负责人超时的问题。（提醒一下，政策是 2 周）。另一个关于“在 ports/MOVED 中但仍存在的 Port”的报告也已添加到异常页面。有时这些是实际错误，但并不总是。

以下是我关于 ports PR 趋势的最新观察：

* 我们（非常短暂地）减少到 650 个 ports PR。从图表来看，这似乎是自 2001 年以来的最低数量。尽管在这两个时间段之间，Port 数量增加了 70%。
* 我们在已分配给 FreeBSD 提交者的现有 Port PR 数量上取得了一些进展，从 400 个减少到大约 350 个。这部分是由于一些提交者对数据库进行了清理，将旧 PR 设置为“反馈”状态，然后再触发上述的“维护者超时”规则。（在某些情况下，PR 现在已经太旧，不再适用，这些会被直接关闭。）
* 目前，有几个维护者负责其中三分之一的 350 个 PR。如果你觉得自己承接的工作过多，请考虑请求新的志愿者来维护这些 Port。
* 在构建错误方面，gcc3.4 的初步测试带来了一些新的问题，gcc3.4 在接受代码方面比 gcc3.3 更严格。这些错误在分类脚本中显示为“未知”。我已经提交了一个修复补丁。
* 大多数构建错误仍然是由编译问题引起的，主要来自 gcc 升级。由于 FreeBSD 通常处于 gcc 适配的前沿，这很正常，但在我看来，我们应该在 5.3 发布之前尽力修复尽可能多的错误。
* 排名第二的构建错误源自于无法在我们 64 位架构上构建的代码，原因是“整个世界都是 PC”这一假设。[这里是完整列表](http://portsmon.firepipe.net/ploticus/uniqueerrorcounts.html)；每个单独的条形图都是可点击的。

## [FreeBSD profile.sh](https://www.freebsd.org/status/report-2004-05-2004-06.html#FreeBSD-profile.sh)

**链接**：<https://projects.fsck.ch/profile/>

联系人：Tobias Roth <<ports@fsck.ch>>

FreeBSD profile.sh 是对 FreeBSD 5 rcng 启动系统的增强，专为笔记本电脑设计。用户可以配置多个网络环境（例如，家庭、工作、大学）。在初始配置完成后，笔记本会自动检测启动时所在的环境，并相应地进行配置。几乎所有 /etc 下的设置都可以按环境进行配置。还可以在一个环境中挂起机器，并在另一个环境中唤醒，重新配置将自动发生。

## [FreeBSD/arm](https://www.freebsd.org/status/report-2004-05-2004-06.html#FreeBSD/arm)

联系人：Olivier Houchard <<cognet@FreeBSD.org>>

没有太多报告，Xscale 支持正在进行中，并且应该很快能在 Intel IQ31244 Evaluation board 上至少启动单用户模式。

## [FreeBSD/MIPS 状态报告](https://www.freebsd.org/status/report-2004-05-2004-06.html#FreeBSD/MIPS-Status-Report)

**链接**

<http://www.freebsd.org/projects/mips/>

[mips64emul](http://www.mdstud.chalmers.se/~md1gavan/mips64emul/)

联系人：Juli Mallett <<jmallett@FreeBSD.org>>

在过去的两个月里，出现了许多可以进行大量工作机会的时机，FreeBSD/MIPS 中的一些重大问题，如上下文切换、时钟、中断和内核虚拟内存，已得到解决。解决了一些与缓存相关的问题，但这些问题远未完成，最后检查时，运行缓存时出现了一些问题，可能会导致无法启动。由于工具链的问题，当前的内核在真实硬件上已经无法启动。

一个 64 位的 MIPS 模拟器已经出现，提供了在模拟器中测试和调试的能力，并且进行了大量的测试。它已经被加入到 FreeBSD 的 Ports 中，且该 port 将尽可能地跟踪主代码库。一般来说，FreeBSD/MIPS 内核应该能在其中良好运行。

在工具链和缓存问题之前，第一个内核线程能够运行，公共总线和一些设备能够附加，系统会启动到 mountroot 提示符。

## [HP Network Scanjet 5](https://www.freebsd.org/status/report-2004-05-2004-06.html#HP-Network-Scanjet-5)

**链接**

[HP Network Scanjet 5 运行 FreeBSD](http://berklix.com/scanjet/)

联系人：Julian Stacey <<jhs@FreeBSD.org>>

HP Network Scanjet 5 可以在扫描仪内部安静地运行 FreeBSD。那些在工作中错过 Unix 的人可以在不引起注意的情况下使用 FreeBSD 主机，避免了那些限制任何非微软 PC 的经理的阻碍。<http://berklix.com/scanjet/>

## [i386 中断代码与 PCI 中断路由](https://www.freebsd.org/status/report-2004-05-2004-06.html#i386-Interrupt-Code-&-PCI-Interrupt-Routing)

联系人：John Baldwin <<jhb@FreeBSD.org>>

增加了对运行时编程中断源极性和触发模式的支持。这包括用于控制 ISA 和 EISA 中断配置的 ELCR 寄存器的迷你驱动程序。atpic 驱动程序根据需要重新编程 ELCR，而 apic 驱动程序根据需要重新编程与中断源相关的中断引脚。关于使用哪些配置的信息主要来自 ACPI。不过，非 ACPI 系统也强制任何用于路由 PCI 中断的 ISA 中断使用低电平极性和电平触发模式。

i386 上的挂起和恢复支持也略有改进。挂起和恢复支持已添加到 ELCR、$PIR 和 apic 驱动程序。

ACPI PCI-PCI 桥接驱动程序已修复，以便在 BIOS 没有提供路由表时回退到 PCI-PCI 桥接交换方法。

现在，可以通过加载程序可调项在启动时启用或禁用混合模式。

## [改进的多字节/宽字符支持](https://www.freebsd.org/status/report-2004-05-2004-06.html#Improved-Multibyte/Wide-Character-Support)

联系人：Tim Robbins <<tjr@FreeBSD.org>>

FreeBSD 基本系统中的许多文本处理工具已更新，以支持多字节字符，包括 comm、cut、expand、fold、join、paste、unexpand 和 uniq。新版本的 GNU grep 和 GNU sort（来自 coreutils）已被导入，并且来自 IBM 和 Red Hat 开发人员的多字节支持补丁也已应用。

未来的工作将集中在修改正则表达式函数以支持多字节字符、提高 C 库例程的性能，以及更新其余的工具（sed 和 tr 是两个仍然需要更新的重要工具）。

## [IPFilter 升级到 3.4.35](https://www.freebsd.org/status/report-2004-05-2004-06.html#IPFilter-Upgraded-to-3.4.35)

**链接**

[IPFilter 官方主页](http://coombs.anu.edu.au/~avalon/ip-filter.html)

联系人：Darren Reed <<darrenr@FreeBSD.org>>

IPFilter 在 FreeBSD-current 和 4-STABLE（4.10 后）中已从 3.4.31 升级到 3.4.35。

## [FreeBSD 上的 KDE](https://www.freebsd.org/status/report-2004-05-2004-06.html#KDE-on-FreeBSD)

**链接**

<http://freebsd.kde.org/>

联系人：Michael Nottebrock <<lofi@FreeBSD.org>>

目前正在进行的工作是将当前在主要 KDE 模块的 ports 中存在的构建开关/选项转换为独立的 ports，以便为它们提供的软件/功能提供包。KOffice 1.3.2 的移植工作几乎完成。由 KDE/FreeBSD 团队成员运营和维护的瑞典 FreeBSD 快照服务器 [http://snapshots.se.freebsd.org](http://snapshots.se.freebsd.org/) 已恢复运行，且运行良好。额外的 amd64 硬件已被添加，amd64 快照将在不久后提供。

## [kgi4BSD](https://www.freebsd.org/status/report-2004-05-2004-06.html#kgi4BSD)

**链接**

[项目网址](http://www.freebsd.org/~nsouch/kgi4BSD)

联系人：Nicholas Souchu <<nsouch@FreeBSD.org>>

KGI 的进展较慢，但稳定。KGI/Linux 加速器的移植工作正在进行中。这不过是一个双缓冲 API，用于将图形命令传递给硬件引擎。

过去几个月的大部分工作集中在控制台管理，尤其是双头控制台方面。此外，一个新的驱动程序构建树现已准备好，可以在同一树中编译 Linux 和 FreeBSD 驱动程序。

关于 KGI 设计的文档正在编写中。

## [FreeBSD 的低开销性能监控](https://www.freebsd.org/status/report-2004-05-2004-06.html#Low-overhead-performance-monitoring-for-FreeBSD)

**链接**

[FreeBSD 上的最佳性能监控系统，建立在现代 CPU 的硬件性能监控功能之上](http://people.freebsd.org/~jkoshy/projects/perf-measurement/)

联系人：Joseph Koshy <<jkoshy@FreeBSD.org>>

当前设计尝试支持每个进程和全系统范围的统计分析以及每个进程的“虚拟”性能计数器。用户空间 API libpmc(3) 已相当稳定，但内核模块的设计正在重新进行，以更好地处理多处理器（MP）。初步开发的目标是支持 AMD Athlon CPU，但意图是支持所有 FreeBSD 支持的 CPU。

一个早期原型已在 Perforce 上提供路径 `//depot/user/jkoshy/projects/pmc/`。

## [网络接口命名变化](https://www.freebsd.org/status/report-2004-05-2004-06.html#Network-interface-naming-changes)

联系人：Brooks Davis <<brooks@FreeBSD.org>>

已提交增强的网络接口克隆 API。它允许接口支持比当前的 `name#` 风格更复杂的名称。这一功能已被用于启用一些有趣的克隆器，如自动配置的 vlan 接口。其他功能包括克隆结构的锁定以及驱动程序拒绝销毁请求的能力。

有关该功能的用户空间支持工作仍在进行中。

## [网络栈锁定](https://www.freebsd.org/status/report-2004-05-2004-06.html#Network-Stack-Locking)

**链接**

[Netperf 网页](http://www.watson.org/~robert/freebsd/netperf/)

联系人：Robert Watson <<rwatson@FreeBSD.org>>

此项目的目标是将 FreeBSD 网络栈从在单一的 Giant 内核锁下运行转换为支持在多个 CPU 上完全并行运行（即完全线程化的网络栈）。这将通过可重入性和抢占性提高单处理器机器的性能/延迟，同时在多处理器机器上通过允许网络流量处理中的真正并行性进一步提升性能。截至 FreeBSD 5.2，可以在没有 Giant 锁的情况下运行低级网络功能、IP 过滤和转发平面，以及在中断处理程序中“处理完成”。这使得进出流量能够在多个接口和 CPU 上并行运行。

工作继续进行，旨在提高网络栈锁定（和性能）的成熟度和完整性，特别是针对 5.3 版本。网络栈开发分支已更新到最新的 CVS 主干，并进行了一些改动。报告编写时，这些更改中的许多已合并到 FreeBSD CVS 树中。完整的详细信息和更多小改动记录在 Netperf 网页的 README 文件中。

* 添加了针对套接字相关锁、路由锁、接口锁、文件描述符锁、SLIP 和 PCB 锁的硬编码 WITNESS 锁定顺序（已合并）。
* 修改了 MAC 框架，改为使用 inpcbs 作为 mbuf 标签的来源，而不是访问套接字层，从而避免了额外的套接字锁获取。通过套接字锁对 so\_label 和 so\_peerlabel 进行了锁定访问；在 MAC 框架中根据需要断言套接字锁。MAC 框架现在在外部化之前复制套接字标签，以防止在持有标签锁时发生复制操作（并可能看到不一致的标签）（已合并）。
* 对网络栈中锁定状态的广泛注释，特别是与套接字相关的部分。
* 为 ng\_base.c（基本的 Netgraph 基础设施）修复了多个锁定问题（已合并）。
* 引入了全局接受过滤器列表锁定，特别是在注册过程中（部分合并）。
* 修订了套接字状态转换助手中的锁定，例如 soisconnecting()、soisconnected() 等，简化了锁定处理（已合并）。
* 修复了 netatalk DDP 锁定中的错误，将所有 netatalk 锁定合并到 CVS 中（已合并）。
* soref() 套接字锁定断言和相关修复（已合并）。
* Fifofs 现在使用自己的互斥锁，而不是 vnode 互锁来同步 fifo 操作，从而避免了套接字缓冲区锁定的锁定顺序问题（已合并）。
* 清理了与文件描述符关闭和 Giant 要求相关的锁定，尝试减少此处的锁定（已合并）。
* 审查并修复了 TCP 代码中套接字锁定的几个实例（已合并）。
* NFS 服务器锁定合并到 FreeBSD CVS 中（已合并）。
* Accept 锁定合并到 rwatson\_netperf，并合并到 FreeBSD CVS 中。现在引入了一个新的全局互斥锁 accept\_mtx，保护所有与套接字相关的接受队列和状态字段（SS\_COMP，SS\_INCOMP），并将与接受相关的标志从通用的 so\_state 字段移到 so\_qstate。重新排列了 accept1() 和 sonewconn()，并修复了文件描述符泄漏。在接受过程中关闭了多种套接字引用竞态条件。soabort() 和其他与部分连接的套接字相关的函数已更新，以考虑锁定（已合并）。
* 通过添加 MSG\_NBIO 解决了与非原子设置 SS\_NBIO 相关的问题（已合并）。
* 将多个标志从 so\_state 移动到 sb\_state，以便可以使用套接字缓冲区互斥锁进行适当的锁定（已合并）。
* 现在，在调用协议时不再持有套接字锁，从而避免了套接字锁和协议锁之间的许多锁定顺序问题，并减少了大量条件锁定（已合并）。
* mbuma，一个基于 UMA 的 mbuf 分配器，已合并到 CVS 中。这减少了内核的内存分配器数量，改善了性能，并允许在内存压力降低时将 mbuf 中的内存回收并重新用于其他类型的存储（已合并）。
* sb\_flags 现在已正确锁定（已合并）。
* 引入了全局 MAC 标签 ifnet 锁定，以保护网络接口上的标签（已合并）。
* 对 soreceive() 和 sosend() 部分进行了重写，以提高 MP 安全性，已合并到 CVS 中，包括修改以确保在释放锁时套接字缓冲区缓存状态一致。添加了 sockbuf\_pushsync() 以确保缓存指针的一致性（已合并）。
* UNIX 域套接字的锁定已修订，改为使用子系统锁，因锁定顺序不一致且未覆盖 unpcb 字段。清理了 UNIX 域套接字中的全局变量锁定，处理了进入 VFS 时的 Giant 锁定。所有 UNIX 域套接字锁定已合并到 CVS 中（已合并）。
* 在路由代码中引入了 netisr 分发，使得路由套接字消息的交付异步于路由事件，从而避免了锁定顺序问题（已合并）。
* IGMP 和多播锁定已合并到 CVS 中（已合并）。
* 清理了由仅用于转发/桥接平面的锁定导致的长期递归 Giant 获取（已合并）。
* ALTQ 已以锁定状态导入 FreeBSD（已合并）。
* 消除了 sbdrop()、sbdroprecord()、sbrelease()、sbflush()、spappend()、sbappendstream()、sbappendrecord()、sbinsertoob()、sbappendaddr()、sbappendcontrol() 中的条件锁定（已合并）。
* 对 IP 栈管理 I/O 控制和锁定顺序问题进行了一些清理（已合并）。
* 清理了 sorflush() 使用临时栈持有套接字缓冲区进行刷新时的锁定（已合并）。
* 对套接字唤醒机制进行了大规模清理，以提前释放锁，避免在上行调用时持有锁，并断言锁定状态正确（已合并）。
* 随着修订后的 ifnet 克隆的整合，克隆数据结构现在得到了更好的锁定（已合并）。
* 为 portalfs 添加了套接字锁定（已合并）。
* 引入了全局 so\_global\_mtx 来保护生成号和套接字计数（已合并）。
* KAME IPSEC 和 FAST\_IPSEC 现在使用 rawcb\_mtx 来保护原始套接字列表集成。此处需要更多工作（已合并）。
* 套接字锁定用于 SO\_SNDLOWAT 和 SO\_RCVLOWAT（已合并）。
* 对 soreserve() 和 sbreserve() 进行了重构，以改善锁定和一致性。tcp\_mss() 中的保留函数也进行了类似的清理（已合并）。
* 在 sbappend\*() 中减少了锁定成本（已合并）。
* 对多个 Netgraph 模块进行了全局锁定，包括 ng\_iface、ng\_ppp、ng\_socket、ng\_pppoe、ng\_frame\_relay、ng\_tty、ng\_eiface（已合并）。
* IPv6 inpcb 锁定。由此产生的 inpcb 锁定断言清理，并在默认情况下启用 inpcb 锁定断言，即使已编译 IPv6（已合并）。
* if\_xl 现在是 MPSAFE（已合并）。
* soreceive() 非内联 OOB 支持已放入自己的函数中（已合并）。
* NFS 客户端套接字锁定（已合并）。
* SLIP 现在使用异步任务队列来防止 TTY 代码的 Giant-free 进入（已合并）。
* 向 current@ 发送了电子邮件，提供了 Giant-free 操作指南和详细信息。

## [数据包过滤器 - pf](https://www.freebsd.org/status/report-2004-05-2004-06.html#Packet-Filterpf)

**链接**

[pf 首页](http://www.benzedrine.cx/pf.html)

联系人：Max Laier <<mlaier@FreeBSD.org>>

联系人：Daniel Hartmeier <<dhartmei@FreeBSD.org>>

我们于 6 月 17 日将 pf 从 OpenBSD 3.5 stable 导入，这将作为 5-STABLE pf 的基础（根据当前计划）。此版本中最重要的改进是新的接口处理方式，使得能够为热插拔设备和伪克隆设备编写 pf 规则集，在它们存在之前。ALTQ 框架的导入使我们终于能够提供相关的 pf 功能。

在 5-STABLE 发布之前，我们将从 OpenBSD-current 导入一些尚未合并到其稳定分支的错误修复，以及一些 FreeBSD 特有的功能。计划中的 ALTQ API 改造也将影响 pf。

我们（迫切）寻找 FreeBSD pf 的非手册页文档及其编写者。由于改动不大，OpenBSD 首页上的优秀 "PF FAQ" 的移植应该是合适的。不过有些内容需要转换。一个简单的教程，讲解如何使用 pf 设置 NAT 网关，也会有所帮助。内核中的 NAT 引擎非常易于使用，我们应该告诉大家这一替代方案。特别是现在 pf 模块已能无需修改地集成到 GENERIC 中。

## [PowerPC 移植](https://www.freebsd.org/status/report-2004-05-2004-06.html#PowerPC-Port)

联系人：Peter Grehan <<grehan@FreeBSD.org>>

此移植项目进展稳步推进。已有报告显示 buildworld 可以原生运行。make release 的工作几乎完成，未来不久将会发布可启动的 CD 镜像。

## [Mini-Evil 项目](https://www.freebsd.org/status/report-2004-05-2004-06.html#Project-Mini-Evil)

联系人：Scott Long <<scottl@freebsd.org>>

Mini-Evil 项目试图将 Bill Paul 的“Project Evil”Windows NDIS 包装层扩展到 SCSI MiniPort 和 StorePort 层。虽然市场上大多数存储控制器都有驱动程序，但许多公司将软件 RAID 集成到其产品中，却没有提供任何源代码或设计规格。Mini-Evil 项目将直接运行 Windows 驱动程序，而不是不断逆向工程这些 RAID 层并试图将其强行集成到 ata-raid 驱动程序中。它也有望运行符合 SCSI Miniport 或 Storeport 规范的任何 SCSI/ATA/RAID 驱动程序。

该项目的工作分为两个方面：使 NDIS 包装代码更通用以及实现新 API。开发工作正在 FreeBSD Perforce 仓库的 //depot/projects/sonofevil/... 分支中进行。

## [SMPng 状态报告](https://www.freebsd.org/status/report-2004-05-2004-06.html#SMPng-Status-Report)

**链接**

联系人：John Baldwin <<jhb@FreeBSD.org>>

联系人：<<smp@FreeBSD.org>>

除了在网络栈锁定工作方面（这是一项大规模的工作），SMPng 方面没有太多进展。已修正了各个软件中断线程的优先级，并改进了任务队列的锁定。sema\_timedwait() 函数的返回值进行了调整，使其与 cv\_timedwait() 更一致。对 sleepqueue 代码进行了小幅修复，以缩短唤醒线程时 sleepqueue 链锁持有的时间。为用于 sleep 队列和转筒代码的哈希表配置添加了一些简单的调试代码。这将允许开发者衡量任何对哈希表大小或哈希算法调整的影响。

## [同步协议（Netgraph 和 SPPP）](https://www.freebsd.org/status/report-2004-05-2004-06.html#Sync-protocols-\(Netgraph-and-SPPP\))

**链接**

[当前代码、想法、问题](http://www.freebsd.org/~rik)

联系人：Roman Kurakin <<rik@FreeBSD.org>>

目前，我在两个方向上工作：if\_spppfr.c 和 sppp 锁定（代表 netperf）。在撰写此报告时，sppp 锁定尚未完成，但预计几天内会完成。作为这项工作的一个部分，你还可以看到一些针对 rwatson netperf 代码的用户空间修复（仅限我在编译 world 时能够捕获的部分。如果你知道其他问题，请告诉我，我会尽力修复）。

由于 sppp 代码非常庞大且状态机非常复杂，因此很难测试所有的代码路径。我非常欢迎任何帮助来测试这些内容。测试者越多，越有可能覆盖所有可能的情况。

由于兴趣较低和时间不足，FRF.12（ng\_frf12）工作暂时冻结。目前稳定代码的状态：支持 FRF.12 端到端分片。FRF.12 接口（UNI 和 NNI）分片尚未测试。

## [TTY 子系统重新调整](https://www.freebsd.org/status/report-2004-05-2004-06.html#TTY-subsystem-realignment)

联系人：Poul-Henning Kamp <<phk@FreeBSD.org>>

将 tty 子系统从 Giant 下解耦的努力，已经转变为一个更广泛的努力，旨在消除许多错误地复制和粘贴到设备驱动程序中的代码。在理想情况下，tty 驱动程序永远不应接触 cdevsw，但由于某些驱动程序不仅仅是 tty 驱动程序（例如同步驱动程序），因此必须达成一个更合理的妥协。该工作正在进行中。

## [各种 GEOM 类和 geom(8) 工具](https://www.freebsd.org/status/report-2004-05-2004-06.html#Various-GEOM-classes-and-geom\(8\)-utility)

联系人：Pawel Jakub Dawidek <<pjd@FreeBSD.org>>

我正在处理各种 GEOM 类。其中一些已经提交并准备好使用（GATE、CONCAT、STRIPE、LABEL、NOP）。MIRROR 类已经完成了 90%，很快会提交。接下来，我将开始处理 RAID3 和 RAID5 的实现。用于控制 GEOM 类的用户空间工具（geom(8)）已经在树中。

## [VuXML 和 portaudit](https://www.freebsd.org/status/report-2004-05-2004-06.html#VuXML-and-portaudit)

**链接**

[VuXML DTD 和更多信息](http://www.vuxml.org/)

[FreeBSD VuXML 渲染内容](http://vuxml.freebsd.org/)

[portaudit.txt 渲染版本](http://www.freebsd.org/ports/portaudit/)

联系人：Tom Rhodes <<trhodes@FreeBSD.org>>

portaudit 工具目前是 FreeBSD 的一个附加组件，旨在让管理员和用户提前了解第三方软件中的安全漏洞。VuXML 数据库记录了这些安全漏洞以及内部的安全漏洞。安装后，portaudit 工具会定期下载一个已知问题的数据库，并检查所有已安装的 Port 或软件包；如果发现安装了有漏洞的软件，管理员或用户将在周期脚本的每日运行输出中收到通知。

这些工具被认为是生产级别的，当前正在讨论是否应将它们纳入基本系统。所有 Port 提交者都被敦促在发现漏洞时添加条目；任何问题可以发送到 eik@ 或我本人。
