Skip to contentSkip to conversation

ipv4: convert /proc/net/arp to seq_file

PATCH In review Arnaldo Carvalho de Melo 2 participants 4 messages Oct 13, 2002

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ipv4: convert /proc/net/arp to seq_file

David,

Please consider pulling from:

master.kernel.org:/home/acme/BK/ip-2.5

Now there is only this changeset outstanding there.

Best Regards,

- Arnaldo

PS.: Any feedback from the pppoe maintainer about seq_file patch?

You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.

===================================================================

[email protected], 2002-10-13 04:47:51-02:00, [email protected]
o ipv4: convert /proc/net/arp to seq_file

 include/net/arp.h  |    1 
 net/ipv4/arp.c     |  155 +--------------------------------------------------
 net/ipv4/ip_proc.c |  161 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 167 insertions(+), 150 deletions(-)
include/net/arp.h +1 -0
diff -Nru a/include/net/arp.h b/include/net/arp.h
@@ -18,6 +18,7 @@
 extern int	arp_bind_neighbour(struct dst_entry *dst);
 extern int	arp_mc_map(u32 addr, u8 *haddr, struct net_device *dev, int dir);
 extern void	arp_ifdown(struct net_device *dev);
+extern unsigned arp_state_to_flags(struct neighbour *neigh);
 
 extern struct neigh_ops arp_broken_ops;
 
net/ipv4/arp.c +5 -150

197 lines not on this page · raw message

net/ipv4/ip_proc.c +161 -0

183 lines not on this page · raw message

===================================================================

This BitKeeper patch contains the following changesets:
1.833
## Wrapped with gzip_uu ##

begin 664 bkpatch30585 M'XL(`#D8J3T``\U9>W/:2!+_6_H4'5*QQ7OTH&#-XZQ8RJQXW/6=:F*4RHA M!J,@)*TDB%.+[[-?]TB\#%YO?'M5(9B1IGNZ>_KQFT=>PG7"X[;DN!,NOX2S M,$G;DAL&W$V]F5-SPTFM'R/A*@R14!^%$UY_^[[N156M9LI(N'12=P0S'B=M M2:WIRY[T1\3;TM7)N^L/1U>RW.G\<@);ODGGD*G(Z=A/'/\0?+&24=^&-32 MVF2"4^%ROF2=:XQIN$_4VWJS&S,U08SFG-7':BJ8ZA\P#3#:AARWPU]WPN2 M-P/>]YR@%L:W#V2H3-7QUS"-N:GKABYW0:U9N@Y,JZNLKN*#T3::;5.M,JW- M&)!#WCQT!)1UJ#[email protected]#:@2G9E"/8I#MQ[PM.[$$>J#A/]A M#SV?R^_!U'>\N7*HW+U)S^RS!PF'SXQ#]).5I$)-7=],BW3FFL-4VW-N6[I M1I\Q5W/YL-4P=SMNER@1D@;.A,W5)OH!S7EBK!?9Y)75>%5MF!C..6--]*YK M:9:EFT-+TQMZ7WO2E"UQ"W,TUM*T)[WC!:X_'?!%C&JC#0<9UMQHM"QKSON- MEFJV5U_++WA/F+5;FGK/F)&RQ*%M#T!JJA_UG?/%&=0BEM9=6F;M66V#?;7 MM:4VU%^ANK+H?X1J_%U\L5HN=_C\&3774YM@R"_S4,-KA*SI'5DQX#//Y;71 MX1J1-;<NQWUPVF\31(Y<K@E;#$/HO6T)JA&"WF&SZ$XX\7I[UW]M%GC&Z] M)$-)<NZP2*J'</3IN-?+?9-X88"TNNR.G!A*R.(DKJ80J^T,!C%/$NRM0$;N M3X=%^4]9$F]N!4K)@2QY00K!@7PC2\,P!B6#K*)-@@^P$$\!H:V)3+1<"A M$F8O*$[U4*AP'=__$GR%PT-0B['[*YY*D1)WA4%UYT8!_VBZBH7,9Q+JJ[ MER59RM_WJ_N"FYB%8F53<F-=,CLM%N$06ID9"PDJ2I"D*H=4-D#\0&489\1 MPX+[AJT4DC>P$D4GS.>P?*_N%V4)&*>3N,"J6"&)._DE/P]5Y^R8,!RJF7 MUD-%H;B1D]1)/1=FH3=[\>137'&SCA5DC2>NNDR@=$S_(\*^.%P:*=0BL)$ M!"C7I602BLHT2+S;@^0,;@MELO$>(V/*(JX'>/:<H89S^K4E$RI1B!#OI; M(O_01[DXZ;T[L\^./IV='WUZ#V5!E"X?=%<IB+\!@W:F<-OVE9?"Z*]-)VMI M]$NL$B_@</;V^O3TY.K#R07H;"75MKTBXS;]DH!)OC$26U1IW;J]'W^B"JJ M"1ZD\8]5N8PP\$,>?UFI^XJ)A568I%EUC?@=LGSYBGE68*JF&V:C:;6.WAYW M3TXQ@Z1<TQ(DH!3DU3>NP+<\Q9R![8?NV.Z/E#VR..W[->ICZW*<T$8.<G( M[D_=,4^3+\+<KUBH5+*8^]5#RH*\9LF^E*Q3&V3URI;4SL,2MAFP_"!6,BP MD4/[0NS&ONHA/6?%C3G?#2$(4T*AX33A@']Q`@6"YZI3@.]>.H*)<XMQ(+L\
MGE!A9*CP0B';I@,JB)1C:?_GXKIK7WP\NKHL%BE]4&:*Z)CK6OI$V<-Q"U^0 M"<?YZH"3&WQW8@X+P,,%XO/G]N(+M5H-*/(ULF$'NF9F+>;:33D[*J;E3/B MPA;AXN3WJX_GPM0%WCXW"):.D+4S7-&&,Q]=-.?.6K@NXCF.`/;;]0<P!BA M=BV;JZ##WMZBVKXA482!M-@^QSA_6V"RM$C.<;E,^9>GHB+,^/)-H*A!**J:
M(OR/\"_9'V7<;PNX19!=4JK5\5=A_F[7WJ]FG$0Q)M50H42L0.'5M+;X%BJD MZZ)W^:_KHZY24J:Z)GR(R9._,,>\Q]%X40JTUR*J-/"JZK:2'!QP!97B*QY ME12$TPH"H4HY4L&KY";(%.%+9D,6VDH&/I2-=AK:0]^Y392@6(&<-Y]I)7-_ MX$RXL$4DYC382LU[>9VTJY+O_Q9*13\+4SE//D[T"XRYV0$=T=_&CF=!2+] M$C0\6E9?@A!-T_DVPGP_\["8Y^/[4OK]]^@'GV>')UOFL,-;>_"YEK$V7 M,@.GB_N%+W6PDP>6JYPH_#[TRN<M+'^@D^;H\TE>4:KZG(W\\(O+EPS39/< M,;W+)29FG[-_BY.^>#ZE/,_["_)R22\@S^8@\3EWDK%XZ(HD0"\6E[I]>-V! MS16?C'ELQ14;'G(10>(F7[3-B+-\('I]-\86U;1T9QCQ&'V.Z_+2XV%$NUGT M:4WLP2"O@^6F#&-9HX2'=0IU5,20,(+-(6$D"!C'30)V5.3[@]UA1[N"1=B] M(,0S0$DTN-7..K,\H-_U_=AR*!$JL+<VITTD69.RRP?#E1-(W%ID.QLFTLP( MOC88B$B=1/0Q:'S\@"CZLJ$^=Q(N+<:(M]PI/:T%Z@JF\%AF#[QX531@=PS M+#IN!&=%5AK)@$RP*[2X0&3[9O:OK=Q\KF03$)4HE40(19=UMB,M_.$UM MY$9"1*L(\N7SWUOW!VHT&6ARSMU&[EPD6CX)9UPI3<1)3J=X[>._$]?C#WS MSN%_D]J:,\.TFL\\U/\*1_KL[N3!D7YKUL\YT6L,,Q+FV-E+=%TQ^J_8Z]. MCWDF;-Z./9T&S[F8DP?.C$_>!CFM<+Q@XB5/K(O1P>-A@&8&[J+8N)N*L_ M'7@3JJKY"X1>7"T^=ILC9OV<N#<L+',H2=)1'.#D0CBNP3GW0VA+5.<"2A!! M<9^W;@\XP4",PL^.&Z6N96$V=2W3P*:7-<A--_3@\QGW"?]Y/'1PSZ1XH9OB M$MUM:2IQ9\US4E#NJJR!0,I,?%);0G?>BNT#[2B];-FA!W&>+PK6%NC8:JP) =NK7ZOP!WQ-UQ,IUT5,?554=5Y?\"V$&N&648````
`
end

#1 lore raw

From: Arnaldo Carvalho de Melo <[email protected]>
Date: Sun, 13 Oct 2002 04:56:56 -0200

Please consider pulling from:

master.kernel.org:/home/acme/BK/ip-2.5

Pulled, thanks.

PS.: Any feedback from the pppoe maintainer about seq_file patch?

None that I've seen :(

We should just put the changes in, if the maintainer really cares he can revert them later after making his case.

Can you repost the changes in question?

#2 lore raw

Em Sat, Oct 12, 2002 at 11:57:56PM -0700, David S. Miller escreveu:

Quoted 8 lines

PS.: Any feedback from the pppoe maintainer about seq_file patch?

None that I've seen :(

We should just put the changes in, if the maintainer really cares he can revert them later after making his case.

Can you repost the changes in question?

Sure, here it is, and it is available for pulling at:

master.kernel.org:/home/acme/BK/llc-2.5

- Arnaldo

You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.

===================================================================

[email protected], 2002-10-09 02:03:34-03:00, [email protected]
o pppoe: use seq_file for proc stuff

Also make it conditional on CONFIG_PROC_FS

 pppoe.c |  156 +++++++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 106 insertions(+), 50 deletions(-)
drivers/net/pppoe.c +106 -50
diff -Nru a/drivers/net/pppoe.c b/drivers/net/pppoe.c
@@ -5,7 +5,7 @@
  * PPPoE --- PPP over Ethernet (RFC 2516)
  *
  *
- * Version:    0.6.10
+ * Version:    0.6.11
  *
  * 220102 :	Fix module use count on failure in pppoe_create, pppox_sk -acme
  * 030700 :     Fixed connect logic to allow for disconnect.
@@ -35,6 +35,7 @@
  * 121301 :     New ppp channels interface; cannot unregister a channel
  *              from interrupts.  Thus, we mark the socket as a ZOMBIE
  *              and do the unregistration later.
+ * 081002 :	seq_file support for proc stuff -acme
  *
  * Author:	Michal Ostrowski <[email protected]>
  * Contributors:
@@ -75,6 +76,7 @@
 #include <linux/notifier.h>
 #include <linux/file.h>
 #include <linux/proc_fs.h>
+#include <linux/seq_file.h>
 
 
 
@@ -974,63 +976,102 @@
 	return error;
 }
 
-int pppoe_proc_info(char *buffer, char **start, off_t offset, int length)
+#ifdef CONFIG_PROC_FS
+static int pppoe_seq_show(struct seq_file *seq, void *v)
 {
 	struct pppox_opt *po;
-	int len = 0;
-	off_t pos = 0;
-	off_t begin = 0;
-	int size;
-	int i;
+	char *dev_name;
 
-	len += sprintf(buffer,
-		       "Id       Address              Device\n");
-	pos = len;
+	if (v == (void *)1) {
+		seq_puts(seq, "Id       Address              Device\n");
+		goto out;
+	}
 
-	write_lock_bh(&pppoe_hash_lock);
+	po = v;
+	dev_name = po->pppoe_pa.dev;
+
+	seq_printf(seq, "%08X %02X:%02X:%02X:%02X:%02X:%02X %8s\n",
+		   po->pppoe_pa.sid,
+		   po->pppoe_pa.remote[0], po->pppoe_pa.remote[1],
+		   po->pppoe_pa.remote[2], po->pppoe_pa.remote[3],
+		   po->pppoe_pa.remote[4], po->pppoe_pa.remote[5], dev_name);
+out:
+  	return 0;
+}
 
-	for (i = 0; i < PPPOE_HASH_SIZE; i++) {
+static __inline__ struct pppox_opt *pppoe_get_idx(loff_t pos)
+{
+	struct pppox_opt *po = NULL;
+	int i = 0;
+
+	for (; i < PPPOE_HASH_SIZE; i++) {
 		po = item_hash_table[i];
 		while (po) {
-			char *dev = po->pppoe_pa.dev;
+			if (!pos--)
+				goto out;
+			po = po->next;
+		}
+	}
+out:
+	return po;
+}
 
-			size = sprintf(buffer + len,
-				       "%08X %02X:%02X:%02X:%02X:%02X:%02X %8s\n",
-				       po->pppoe_pa.sid,
-				       po->pppoe_pa.remote[0],
-				       po->pppoe_pa.remote[1],
-				       po->pppoe_pa.remote[2],
-				       po->pppoe_pa.remote[3],
-				       po->pppoe_pa.remote[4],
-				       po->pppoe_pa.remote[5],
-				       dev);
-			len += size;
-			pos += size;
-			if (pos < offset) {
-				len = 0;
-				begin = pos;
-			}
+static void *pppoe_seq_start(struct seq_file *seq, loff_t *pos)
+{
+	loff_t l = *pos;
 
-			if (pos > offset + length)
-				break;
+	read_lock_bh(&pppoe_hash_lock);
+	return l ? pppoe_get_idx(--l) : (void *)1;
+}
 
-			po = po->next;
+static void *pppoe_seq_next(struct seq_file *seq, void *v, loff_t *pos)
+{
+	struct pppox_opt *po;
+
+	++*pos;
+	if (v == (void *)1) {
+		po = pppoe_get_idx(0);
+		goto out;
+	}
+	po = v;
+	po = po->next;
+	if (!po) {
+		int hash = hash_item(po->pppoe_pa.sid, po->pppoe_pa.remote);
+
+		while (++hash < PPPOE_HASH_SIZE) {
+			po = item_hash_table[hash];
+			if (po)
+				break;
 		}
+	}
+out:
+	return po;
+}
 
-		if (po)
-			break;
-  	}
-	write_unlock_bh(&pppoe_hash_lock);
+static void pppoe_seq_stop(struct seq_file *seq, void *v)
+{
+	read_unlock_bh(&pppoe_hash_lock);
+}
+
+struct seq_operations pppoe_seq_ops = {
+	.start		= pppoe_seq_start,
+	.next		= pppoe_seq_next,
+	.stop		= pppoe_seq_stop,
+	.show		= pppoe_seq_show,
+};
 
-  	*start = buffer + (offset - begin);
-  	len -= (offset - begin);
-  	if (len > length)
-  		len = length;
-	if (len < 0)
-		len = 0;
-  	return len;
+static int pppoe_seq_open(struct inode *inode, struct file *file)
+{
+	return seq_open(file, &pppoe_seq_ops);
 }
 
+static struct file_operations pppoe_seq_fops = {
+	.open           = pppoe_seq_open,
+	.read           = seq_read,
+	.llseek         = seq_lseek,
+	.release        = seq_release,
+};
+#endif /* CONFIG_PROC_FS */
 
 struct proto_ops pppoe_ops = {
     .family		= AF_PPPOX,
@@ -1061,13 +1102,28 @@
 {
  	int err = register_pppox_proto(PX_PROTO_OE, &pppoe_proto);
 
-	if (err == 0) {
-		dev_add_pack(&pppoes_ptype);
-		dev_add_pack(&pppoed_ptype);
-		register_netdevice_notifier(&pppoe_notifier);
-		proc_net_create("pppoe", 0, pppoe_proc_info);
-	}
+	if (err)
+		goto out;
+#ifdef CONFIG_PROC_FS
+{
+	struct proc_dir_entry *p = create_proc_entry("pppoe", S_IRUGO,
+						     proc_net);
+	err = -ENOMEM;
+	if (!p)
+		goto out_unregister;
+	
+	p->proc_fops = &pppoe_seq_fops;
+	err = 0;
+}
+#endif /* CONFIG_PROC_FS */
+	dev_add_pack(&pppoes_ptype);
+	dev_add_pack(&pppoed_ptype);
+	register_netdevice_notifier(&pppoe_notifier);
+out:
 	return err;
+out_unregister:
+	unregister_pppox_proto(PX_PROTO_OE);
+	goto out;
 }
 
 void __exit pppoe_exit(void)
@@ -1076,7 +1132,7 @@
 	dev_remove_pack(&pppoes_ptype);
 	dev_remove_pack(&pppoed_ptype);
 	unregister_netdevice_notifier(&pppoe_notifier);
-	proc_net_remove("pppoe");
+	remove_proc_entry("pppoe", proc_net);
 }
 
 module_init(pppoe_init);

===================================================================

This BitKeeper patch contains the following changesets:
1.637
## Wrapped with gzip_uu ##

begin 664 bkpatch3941 M'XL(`$0<J3T``]5766_;.!!^EG[%;((6MN.#NGW4W:9)VAH];"2;1;%M(<@2 M%0N11:U$NRGJ_/<=4KXC)]AB7U8)*&F&G)EOYAM2/H;KG&9=Q?.G5#V&=RSG M7<5G"?5Y-/>:/ILVQQDJ+AE#16O"IK3U^GTKCOV&WK14U(P\[D]@3K.\JVA- M8RWA/U+:52XOWEY_.+U4U7X?SB9><D.O*(=^7^4LFWMQD+_R^"1F29-G7I)/ M*9<^%^NI"YT0'?\LS3&(92\TFYC.PM<"3?-,C09$-]NVJ8KP7^V'O6=%(Z1- M#+-CZ@N;.,11ST%KVH8#1&]II$4Z^-E1M<P&S@2J5&X42#!E%?PW\+X$SU M@4&:IHQV8993R.G?;AC%%$*609HQ'W(^"T.<AO^G<<Y@ZMU2B#A@A$'$(Y9X M,;$SH:?W@S>NJ/+X9G[YDI]#S:Q'%T=;=*O-O[EI:K$(^K+)R'6218T$HH M;TD@37\+O$F(L=!UPS$66C"V?+_=]ISQV"18@/+J';*'=>P0"^_.PC8LDTAN ME4Q^FF6_'+&:S7+^XY48?9:E,F)O=M@>\DYS+,W4%KKEV7S-'N7>'I7<YX@ M'K&A8?V_N"<+-(1&]EW^(Y=&9;7Z!4J>MT%3!V*&OR)]C"*+N!%FG930Q42 M2^I(&QFC0U=9P\IGZ#7C>_"@(3?!@2/6'4>)'\\""B_B*)G=M59KFY.7ZGE' M3AF(FXXSPX"&^]!S[O'(ARCA16)=82"?L.^5G&<SGV]R7,.G.LQ9%$!M7D7C M;0(6&F^;Z$/Q)UX&M8#.W<2;TIY0VV(=1M,58E"J,R1Z#A*U6M"C]514)- M9SRO2.-'@P"*ZS0(,IKGL'.=TWGDTZ_)4;6'2V\89\!F')_OT5V'2*CBAN&D M#/HP1]4J(GQ-6>-E@3'UFBCOJ5_5(H,X8?+$)Z1]F=X1O3/W4,#/&OG&$0= M8\"@=JSF45FSNB4<?J%?*N7RK5OCRS2#RPR'EMD'EADH7R5$4PB9J^KB@9 MY;,L=)392;U(I,ZV"MZN&Z4(+^HZ\*2%L+RG<M2#K7"R0WE;A3<56(6AB[J M65Y5L<(ETT5I/EU_^(#5$;2+\)7(6@B:5WHH>`&CT6AXX;X[O7KG7@W^ND#A MR8E@#$9G%=%9T$;\DEB_H;-&HRI>MUFA%"P0>4CHG93<"ZY(U"O,*5N"QDZQ MU8%&-!UINX1=<'6K+[B7\0.-L<1=6P%?OL<8@9!A1Z!M$_M0^+#0!T;@!6[, M_%MW/*D\+[Q,O'PB98+BRQ!C^!UV<]QHQ%7H;GI)0D"SLMN+>_L0!I&*QWO[ M(9:R(LJ*G9P4V[V=U&!G>#)P^[=M.M^Q9;E+8P)MH@$X129IXC3:>5!_Y41 MORJC5;Y/!-C*R8FT\H!EA9<B!F&[J;WQC'](AZ_]5:,PX@DV\98P]N>S+G< MYLK)I>'1AEJ<I1MB=]JNS#:Y6/K4IOMSR9I9\@AO[A'KEAV6TLP31U^^Y8RE M.8)$<TW):47IPQ[-<7=IBB+LJH2D+E>Q='\12Z4&SXX]#4KJZKWL`-T"1R3" MT#9=MGOV8+C)*@U1PO!DJ\E;?;7S%'D1XS(?,M7KI4)1A^<[4*NR1(:!OI<^ MMVR5)RC<9$B8W3J%^GO!"M"B*#M3A%((A3*.<TIO]Y125BR-J8??,GM+I5!F M[9CBITL(K=K>T0VUELBH;8+<M^R.:'K)3IIEU9T6*S_ZMQH;ORW<(,I<FO#L M!W8WAN%C^!Q;2*BDN'(D<1_5X<H=7%Z_'=9E"\@S"H3^*$DFAO]HX'&Q:?A MQXN/ZR;>#@D)G-&;*.<T0SVV/7:L,+#,^O/=.JQ-R@/JL7S(X]X+NQ\_W;9 M&[F;BI]XU5ZI-MAH5Q$)&('\U'3QJ,PHMFJS5;OJ[,3\^X09/(N)-P-B]N ML6LB/,XJH\\BVC^&[O!">-Q4"`OI=(K=6]X5L6_-R]._E>KUCUA_0OW;?#;M 1!YV.[X1C3?T'+AM][3$/````
`
end

#3 lore raw

From: Arnaldo Carvalho de Melo <[email protected]>
Date: Sun, 13 Oct 2002 05:10:59 -0200

Sure, here it is, and it is available for pulling at:

master.kernel.org:/home/acme/BK/llc-2.5

Pulled, thanks.