+void lo_reg_if_mods()
+{
+ struct dlil_ifmod_reg_str lo_ifmod;
+ struct dlil_protomod_reg_str lo_protoreg;
+ int error;
+
+ bzero(&lo_ifmod, sizeof(lo_ifmod));
+ lo_ifmod.add_if = lo_add_if;
+ lo_ifmod.del_if = lo_del_if;
+ lo_ifmod.add_proto = lo_add_proto;
+ lo_ifmod.del_proto = lo_del_proto;
+ lo_ifmod.ifmod_ioctl = 0;
+ lo_ifmod.shutdown = lo_shutdown;
+
+ if (dlil_reg_if_modules(APPLE_IF_FAM_LOOPBACK, &lo_ifmod))
+ panic("Couldn't register lo modules\n");
+
+ /* Register protocol registration functions */
+
+ bzero(&lo_protoreg, sizeof(lo_protoreg));
+ lo_protoreg.attach_proto = lo_attach_inet;
+ lo_protoreg.detach_proto = NULL; /* no detach function for loopback */
+
+ if ( error = dlil_reg_proto_module(PF_INET, APPLE_IF_FAM_LOOPBACK, &lo_protoreg) != 0)
+ printf("dlil_reg_proto_module failed for AF_INET error=%d\n", error);
+
+ lo_protoreg.attach_proto = lo_attach_inet6;
+ lo_protoreg.detach_proto = NULL;
+
+ if ( error = dlil_reg_proto_module(PF_INET6, APPLE_IF_FAM_LOOPBACK, &lo_protoreg) != 0)
+ printf("dlil_reg_proto_module failed for AF_INET6 error=%d\n", error);
+
+}