1216
1217static const struct seq_operations rose_neigh_seqops = {
1218 .start = rose_neigh_start,
1219 .next = rose_neigh_next,
1220 .stop = rose_neigh_stop,
1221 .show = rose_neigh_show,
1222};
1223
1224static int rose_neigh_open(struct inode *inode, struct file *file)
1225{
1226 return seq_open(file, &rose_neigh_seqops);
1227}
1228
1229const struct file_operations rose_neigh_fops = {
1230 .owner = THIS_MODULE,
1231 .open = rose_neigh_open,
1232 .read = seq_read,
1233 .llseek = seq_lseek,
1234 .release = seq_release,
1235};
1236
1237
1238static void *rose_route_start(struct seq_file *seq, loff_t *pos)
1239 __acquires(rose_route_list_lock)
1240{
1241 struct rose_route *rose_route;
1242 int i = 1;
1243
1244 spin_lock_bh(&rose_route_list_lock);
1245 if (*pos == 0)
1246 return SEQ_START_TOKEN;
1247
1248 for (rose_route = rose_route_list; rose_route && i < *pos;
1249 rose_route = rose_route->next, ++i);
1250
1251 return (i == *pos) ? rose_route : NULL;
1252}
1253
1254static void *rose_route_next(struct seq_file *seq, void *v, loff_t *pos)
1255{
1256 ++*pos;