206 * Display all instantiated ipnet device nodes.
207 */
208 /* ARGSUSED */
209 static int
210 devipnet_readdir(struct vnode *dvp, struct uio *uiop, struct cred *cred,
211 int *eofp, caller_context_t *ct, int flags)
212 {
213 struct sdev_node *sdvp = VTOSDEV(dvp);
214
215 if (uiop->uio_offset == 0)
216 devipnet_filldir(sdvp);
217
218 return (devname_readdir_func(dvp, uiop, cred, eofp, 0));
219 }
220
221 /*
222 * We override lookup and readdir to build entries based on the
223 * in kernel ipnet table.
224 */
225 const fs_operation_def_t devipnet_vnodeops_tbl[] = {
226 VOPNAME_READDIR, { .vop_readdir = devipnet_readdir },
227 VOPNAME_LOOKUP, { .vop_lookup = devipnet_lookup },
228 VOPNAME_CREATE, { .error = fs_nosys },
229 VOPNAME_REMOVE, { .error = fs_nosys },
230 VOPNAME_MKDIR, { .error = fs_nosys },
231 VOPNAME_RMDIR, { .error = fs_nosys },
232 VOPNAME_SYMLINK, { .error = fs_nosys },
233 VOPNAME_SETSECATTR, { .error = fs_nosys },
234 NULL, NULL
235 };
|
206 * Display all instantiated ipnet device nodes.
207 */
208 /* ARGSUSED */
209 static int
210 devipnet_readdir(struct vnode *dvp, struct uio *uiop, struct cred *cred,
211 int *eofp, caller_context_t *ct, int flags)
212 {
213 struct sdev_node *sdvp = VTOSDEV(dvp);
214
215 if (uiop->uio_offset == 0)
216 devipnet_filldir(sdvp);
217
218 return (devname_readdir_func(dvp, uiop, cred, eofp, 0));
219 }
220
221 /*
222 * We override lookup and readdir to build entries based on the
223 * in kernel ipnet table.
224 */
225 const fs_operation_def_t devipnet_vnodeops_tbl[] = {
226 { VOPNAME_READDIR, { .vop_readdir = devipnet_readdir } },
227 { VOPNAME_LOOKUP, { .vop_lookup = devipnet_lookup } },
228 { VOPNAME_CREATE, { .error = fs_nosys } },
229 { VOPNAME_REMOVE, { .error = fs_nosys } },
230 { VOPNAME_MKDIR, { .error = fs_nosys } },
231 { VOPNAME_RMDIR, { .error = fs_nosys } },
232 { VOPNAME_SYMLINK, { .error = fs_nosys } },
233 { VOPNAME_SETSECATTR, { .error = fs_nosys } },
234 { NULL, { NULL } }
235 };
|