⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppp_c source file.htm

📁 关于PPP点对点协议的一些详细资料
💻 HTM
📖 第 1 页 / 共 3 页
字号:
00197   <SPAN class=keywordflow>if</SPAN> (reteDEBUG&amp;4) {
00198    printf(<SPAN class=stringliteral>"(lun=%u) "</SPAN>,scbyte(ppplog_len)+8);
00199    <SPAN class=keywordflow>for</SPAN> (t=0;( t&lt;(scbyte(ppplog_len)+8) )&amp;&amp;(t&lt;60);t++) 
00200     printf(<SPAN class=stringliteral>"%x "</SPAN>,ppplog[t]);printf(<SPAN class=stringliteral>"\n"</SPAN>);
00201   }  
00202 
00203   <SPAN class=keywordflow>if</SPAN> ((reteDEBUG&amp;8)==0) <SPAN class=keywordflow>return</SPAN>;
00204   <SPAN class=keywordflow>if</SPAN> ( ((stato&amp;0x03ff)==0x03ff)&amp;(!(reteDEBUG&amp;1))) <SPAN class=keywordflow>return</SPAN>;
00205   <SPAN class=keywordflow>if</SPAN> ((stato&amp;0x03ff)&lt;0x03ff) printf(<SPAN class=stringliteral>"stato=%x:  "</SPAN>,stato);   
00206   <SPAN class=keywordflow>if</SPAN> (scbyte(ppplog_proto)==0x80fd) <SPAN class=keywordflow>return</SPAN>;
00207   Log <SPAN class=stringliteral>"%s: "</SPAN>,iniz);
00208   <SPAN class=keywordflow>switch</SPAN> (scbyte(ppplog_proto)) {
00209     <SPAN class=keywordflow>case</SPAN> 0xc021: <SPAN class=comment>/*LCP*/</SPAN>
00210          Log <SPAN class=stringliteral>"LCP  "</SPAN>);
00211          Log <SPAN class=stringliteral>"0x%x "</SPAN>,ppplog_id);
00212          CoNf();
00213          leggiOPZ();
00214          <SPAN class=keywordflow>break</SPAN>;
00215     <SPAN class=keywordflow>case</SPAN> 0xc023:Log <SPAN class=stringliteral>"PAP  "</SPAN>); <SPAN class=comment>/*PAP*/</SPAN>
00216                 Log <SPAN class=stringliteral>"0x%x "</SPAN>,ppplog_id);
00217                 CoNf();
00218                 <SPAN class=keywordflow>for</SPAN> (t=0;t&lt;(scbyte(ppplog_len)-4);t++)
00219                      <SPAN class=keywordflow>if</SPAN> (ppplog_dati[t]==0x06) Log <SPAN class=stringliteral>" Us:"</SPAN> ); <SPAN class=keywordflow>else</SPAN>
00220                      <SPAN class=keywordflow>if</SPAN> (ppplog_dati[t]==0x07) Log <SPAN class=stringliteral>" Pass:"</SPAN> ); <SPAN class=keywordflow>else</SPAN>
00221                      <SPAN class=keywordflow>if</SPAN> (ppplog_dati[t]==0x08) Log <SPAN class=stringliteral>" OK:"</SPAN> ); <SPAN class=keywordflow>else</SPAN>
00222                      <SPAN class=keywordflow>if</SPAN> (ppplog_dati[t]&gt;31) Log <SPAN class=stringliteral>"%c"</SPAN>,ppplog_dati[t]);
00223                 Log <SPAN class=stringliteral>" "</SPAN>); 
00224                 <SPAN class=keywordflow>break</SPAN>;    
00225     <SPAN class=keywordflow>case</SPAN> 0x8021:Log <SPAN class=stringliteral>"IPCP "</SPAN>); <SPAN class=comment>/*IPCP*/</SPAN> 
00226                 Log <SPAN class=stringliteral>"0x%x "</SPAN>,ppplog_id);
00227                 CoNf();
00228                 leggiOPZ();<SPAN class=keywordflow>break</SPAN>;
00229     <SPAN class=keywordflow>case</SPAN> 0x0021:Log <SPAN class=stringliteral>"IP (%u) "</SPAN>,scbyte(*(u_short *)(ppplog+7))); <SPAN class=comment>/*IP*/</SPAN>
00230                 Log <SPAN class=stringliteral>"src=%u.%u.%u.%u "</SPAN>, ppplog_dati[8], ppplog_dati[9],ppplog_dati[10],ppplog_dati[11]);
00231                 Log <SPAN class=stringliteral>"dst=%u.%u.%u.%u "</SPAN>,ppplog_dati[12],ppplog_dati[13],ppplog_dati[14],ppplog_dati[15]);
00232                 Log <SPAN class=stringliteral>"proto=%u "</SPAN>,ppplog_dati[5]);
00233                 <SPAN class=keywordflow>if</SPAN> ((ppplog_dati[5]==6)||(ppplog_dati[5]==17)) {
00234                   Log <SPAN class=stringliteral>"%u:%u "</SPAN>,scbyte(*(u_short *)(ppplog_dati+16)),scbyte(*(u_short *)(ppplog_dati+18)));
00235                   <SPAN class=keywordflow>if</SPAN> (ppplog_dati[5]==6) {
00236                      Log <SPAN class=stringliteral>"(%x:%x) "</SPAN>,scbyte4(*(u_int *)(ppplog_dati+20)),scbyte4(*(u_int *)(ppplog_dati+24)));
00237                      <SPAN class=keywordflow>if</SPAN> (ppplog_dati[29]&amp;0x02) Log <SPAN class=stringliteral>"S"</SPAN>); <SPAN class=keywordflow>else</SPAN> Log <SPAN class=stringliteral>"_"</SPAN>);
00238                      <SPAN class=keywordflow>if</SPAN> (ppplog_dati[29]&amp;0x10) Log <SPAN class=stringliteral>"A"</SPAN>); <SPAN class=keywordflow>else</SPAN> Log <SPAN class=stringliteral>"_"</SPAN>);
00239                      <SPAN class=keywordflow>if</SPAN> (ppplog_dati[29]&amp;0x01) Log <SPAN class=stringliteral>"F"</SPAN>); <SPAN class=keywordflow>else</SPAN> Log <SPAN class=stringliteral>"_"</SPAN>);
00240                      <SPAN class=keywordflow>if</SPAN> (ppplog_dati[29]&amp;0x04) Log <SPAN class=stringliteral>"R"</SPAN>); <SPAN class=keywordflow>else</SPAN> Log <SPAN class=stringliteral>"_"</SPAN>);
00241                      <SPAN class=keywordflow>if</SPAN> (ppplog_dati[29]&amp;0x08) Log <SPAN class=stringliteral>"P"</SPAN>); <SPAN class=keywordflow>else</SPAN> Log <SPAN class=stringliteral>"_"</SPAN>);
00242                      <SPAN class=keywordflow>if</SPAN> (ppplog_dati[29]&amp;0x20) Log <SPAN class=stringliteral>"U"</SPAN>); <SPAN class=keywordflow>else</SPAN> Log <SPAN class=stringliteral>"_"</SPAN>);
00243                   }
00244                 }
00245                 <SPAN class=keywordflow>break</SPAN>;
00246     
00247       <SPAN class=keywordflow>default</SPAN> :
00248          Log <SPAN class=stringliteral>"Proto=%x "</SPAN>,scbyte(ppplog_proto));
00249          <SPAN class=keywordflow>break</SPAN>;
00250   }
00251  <SPAN class=keywordflow>if</SPAN> (ppplog_fcs==pppfcs(PPPINITFCS,ppplog+1,scbyte(ppplog_len)+4))
00252         Log <SPAN class=stringliteral>" fcsPPP_OK"</SPAN>);
00253         <SPAN class=keywordflow>else</SPAN> Log <SPAN class=stringliteral>" fcsPPP_BAD"</SPAN>);
00254  <SPAN class=keywordflow>if</SPAN> (scbyte(ppplog_proto)!=0x80fd) { Scrivilog;} <SPAN class=keywordflow>else</SPAN> nlog=0;
00255 } 
00256 
00257 u_int indirizzoPPP() {  <SPAN class=comment>/* ritorna l'IP locale (da cancellare perche' inutile)*/</SPAN>
00258   <SPAN class=keywordflow>return</SPAN> IPlocale;
00259 }
00260 
00261 <SPAN class=preprocessor>#define PPPout(a,b,c,d,e) pppout_flag=0x73;pppout_addr=0xff;\</SPAN>
00262 <SPAN class=preprocessor>                          pppout_code=a;pppout_id=b;pppout_control=c;\</SPAN>
00263 <SPAN class=preprocessor>                          pppout_proto=scbyte(d);pppout_len=scbyte(e);</SPAN>
00264 <SPAN class=preprocessor></SPAN>
00265 
00266 <SPAN class=keywordtype>void</SPAN> mandaser() { <SPAN class=comment>/* funzione che pesca dal buffer in trasmissione e invia */</SPAN>
00267  <SPAN class=keywordtype>int</SPAN> ta;
00268  <SPAN class=keywordflow>for</SPAN> (ta=0;ta&lt;3000;ta++) <SPAN class=comment>/* trasmette non piu' di 3000 caratteri presenti nel buffer */</SPAN>
00269   <SPAN class=keywordflow>if</SPAN> (bufTX2!=bufTX1) {
00270     scrivibyteseriale(bufTX[bufTX2]);
00271     bufTX2=(bufTX2+1)%100000;
00272   }
00273 }
00274 
00275 
00276 <SPAN class=keywordtype>void</SPAN> mandabyte(u_char Ch1) { <SPAN class=comment>/* scrive sul buffer di trasmissione */</SPAN>
00277   bufTX[bufTX1]=Ch1;
00278   bufTX1=(bufTX1+1)%100000;
00279 }
00280 
00281 
00282 <SPAN class=keywordtype>void</SPAN> mandappp() { <SPAN class=comment>/* costruisce un frame in trasmissione */</SPAN>
00283   <SPAN class=keywordtype>int</SPAN> t;
00284   u_short lungh;
00285   u_char chu;
00286   <SPAN class=keywordflow>if</SPAN> (reteDEBUG&amp;2) printf(<SPAN class=stringliteral>"mandaPPP\n"</SPAN>);  
00287 <SPAN class=comment>/*if (stato&lt;7) delay(100); */</SPAN>
00288   <SPAN class=keywordflow>if</SPAN> (pppout_proto==0x2100) lungh=IP_LUNGH; <SPAN class=keywordflow>else</SPAN> lungh=scbyte(pppout_len);
00289   leds|=2; 
00290   pppout_fcs=0;
00291   pppout_fcs=pppfcs(PPPINITFCS,pppout+1,lungh+4);
00292   mandabyte('\x7e');
00293   <SPAN class=keywordflow>for</SPAN> (t=1;t&lt;(lungh+7);t++)
00294     <SPAN class=keywordflow>if</SPAN> ((pppout[t]==0x7d)||(pppout[t]==0x7e)||
00295     ((pppout[t]&lt;32)&amp;&amp;((1&lt;&lt;pppout[t])&amp;asyncmap))  ) { 
00296      chu=pppout[t]^0x20; 
00297      mandabyte('\x7d');
00298      mandabyte(chu);
00299     } <SPAN class=keywordflow>else</SPAN> mandabyte(pppout[t]);
00300   pppout[0]=pppout[t]='\x7e';
00301   logga(pppout,<SPAN class=stringliteral>"Out"</SPAN>);
00302   mandabyte('\x7e');
00303 }
00304 
00305 
00306 u_char mandaPPP(u_char *bufen,u_short lungh) {
00307 <SPAN class=comment>/*  while (F_PPP) delay(50);</SPAN>
00308 <SPAN class=comment>  F_PPP=1;*/</SPAN>
00309   <SPAN class=keywordflow>if</SPAN> (reteDEBUG&amp;2) printf(<SPAN class=stringliteral>"mandaPPP\n"</SPAN>);
00310   copymem(bufen,buff+5,lungh);
00311 <SPAN class=comment>/*  printf("%0x %02x %0x %02x\n",bufen,*bufen,pppout,pppout[9]); */</SPAN>
00312   <SPAN class=keywordflow>if</SPAN> (lungh!=IP_LUNGH) 
00313     {printf(<SPAN class=stringliteral>"mandaPPP:lungh!=pppout_len\n"</SPAN>); <SPAN class=comment>/* F_PPP=0 */</SPAN>;<SPAN class=keywordflow>return</SPAN> 0;}
00314   pppout_flag=0x7e;
00315   pppout_addr=0xff;
00316   pppout_control=0x03;
00317   pppout_proto=scbyte(0x0021);
00318 <SPAN class=comment>/*  *(u_int *)(pppout+25)=IPlocale;    :))))) */</SPAN>
00319   mandappp();
00320 <SPAN class=comment>/*  for (t=1;pppout[t]!=0x7e;t++) printf("%02x ",pppout[t]); puts(""); */</SPAN>
00321   
00322 <SPAN class=comment>/*  F_PPP=0; */</SPAN>
00323   <SPAN class=keywordflow>return</SPAN> 1;
00324 }
00325 
00326 <SPAN class=comment>/* stato:</SPAN>
00327 <SPAN class=comment>1.TxLcpConfReq</SPAN>
00328 <SPAN class=comment>2.RxLcpConfAck</SPAN>
00329 <SPAN class=comment>*/</SPAN>
00330 
00331 
00332 u_short riceviPPP() {
00333 <SPAN class=keywordtype>int</SPAN> tPPP,ppp_ack,ppp_ack2;
00334 <SPAN class=preprocessor>#define TIMEOUT_PPP (stato&amp;0x0800)</SPAN>
00335 <SPAN class=preprocessor></SPAN><SPAN class=keywordtype>void</SPAN> TxLCPConfReq() {
00336 <SPAN class=comment>/*  while (F_PPP);</SPAN>
00337 <SPAN class=comment>  F_PPP=1;*/</SPAN>
00338   <SPAN class=keywordflow>if</SPAN> (reteDEBUG&amp;2) printf(<SPAN class=stringliteral>"mandaPPP1\n"</SPAN>);  
00339   PPPout(1,1,0x03,0xc021,4+6)
00340   copymem(<SPAN class=stringliteral>"\x02\x06\xff\xff\xff\xff"</SPAN>,pppout_dati,6);
00341   asyncmap2=0xffffffff;
00342   mandappp();
00343 <SPAN class=comment>/*  F_PPP=0; */</SPAN>
00344 
00345 }
00346 
00347 
00348 <SPAN class=keywordtype>void</SPAN> TxLCPConfAckNack() {
00349       ppp_ack2=ppp_ack=2;
00350       <SPAN class=keywordflow>for</SPAN> (tPPP=t=0;t&lt;(scbyte(ppp_len)-4);) {
00351          <SPAN class=keywordflow>if</SPAN> (ppp_dati[t]==2) { 
00352 <SPAN class=comment>/*           asyncmap2=scbyte4(*(u_int *)(ppp_dati+2)); */</SPAN>
00353            <SPAN class=keywordflow>if</SPAN> (reteDEBUG&amp;4) printf(<SPAN class=stringliteral>"Async=%x\n"</SPAN>,asyncmap2);
00354          }  
00355          <SPAN class=keywordflow>if</SPAN> ((ppp_dati[t]==3)&amp;&amp;(ppp_dati[t+1]==5))
00356          { 
00357            ppp_ack2=3; 
00358            <SPAN class=keywordflow>if</SPAN> (ppp_ack!=4) { 
00359             copymem(<SPAN class=stringliteral>"\x03\x04\xc0\x23"</SPAN>,pppout_dati+tPPP,4);
00360             tPPP+=4;
00361            } 
00362          }
00363            <SPAN class=keywordflow>else</SPAN> <SPAN class=comment>/* nack */</SPAN>
00364 <SPAN class=comment>/*         if ((ppp_dati[t]==2)&amp;&amp;(ppp_dati[t+2]!=0xff))</SPAN>
00365 <SPAN class=comment>           ppp_confnack++; else </SPAN>
00366 <SPAN class=comment>         if ((ppp_dati[t]==2)&amp;&amp;asyncmapno)</SPAN>
00367 <SPAN class=comment>             ppp_ack2=3; else */</SPAN>
00368          <SPAN class=keywordflow>if</SPAN> (ppp_dati[t]==2)
00369              ppp_ack2=2; <SPAN class=keywordflow>else</SPAN> 
00370          <SPAN class=keywordflow>if</SPAN> ((ppp_dati[t]==3)&amp;&amp;(ppp_dati[t+1]==4))
00371            ppp_ack2=2; 
00372          <SPAN class=keywordflow>else</SPAN>
00373            ppp_ack2=4;
00374 <SPAN class=comment>/*</SPAN>
00375 <SPAN class=comment>  ppp_ack2 ppp_ack</SPAN>
00376 <SPAN class=comment>  2       2        copia -&gt;2</SPAN>
00377 <SPAN class=comment>  2       3        copia -&gt;3</SPAN>
00378 <SPAN class=comment>  2       4        noncopia -&gt;4</SPAN>
00379 <SPAN class=comment>  3       2        copia -&gt;3</SPAN>
00380 <SPAN class=comment>  3       3        copia -&gt;3</SPAN>
00381 <SPAN class=comment>  3       4        noncopia -&gt;4</SPAN>
00382 <SPAN class=comment>  4       2        tPPP=0 copia -&gt;4</SPAN>
00383 <SPAN class=comment>  4       3        tPPP=0 copia -&gt;4</SPAN>
00384 <SPAN class=comment>  4       4        copia -&gt;4 </SPAN>
00385 <SPAN class=comment>  </SPAN>
00386 <SPAN class=comment>  </SPAN>
00387 <SPAN class=comment>   </SPAN>
00388 <SPAN class=comment>*/</SPAN>
00389 
00390          <SPAN class=keywordflow>if</SPAN> ((ppp_ack2==4)&amp;&amp;(ppp_ack&lt;4)) tPPP=0;
00391          <SPAN class=keywordflow>if</SPAN> (((ppp_ack!=4)||(ppp_ack2==4))&amp;&amp;(ppp_ack2!=3)) {
00392            copymem(ppp_dati+t,pppout_dati+tPPP,ppp_dati[t+1]);
00393            tPPP+=pppout_dati[tPPP+1];
00394          }
00395          <SPAN class=keywordflow>if</SPAN> (ppp_ack&lt;ppp_ack2) ppp_ack=ppp_ack2;  
00396          t+=ppp_dati[t+1];
00397       }<SPAN class=comment>/* loop opzioni */</SPAN>
00398       PPPout(ppp_ack,ppp_id,0x03,0xc021,tPPP+11-7);
00399       mandappp();
00400 }
00401 
00402 u_char RxLCPConfReq() {
00403   <SPAN class=keywordflow>return</SPAN> (stato&amp;0x1000)&amp;&amp;(ppp_code==1);
00404 }
00405 u_char RxLCPConfAck() {
00406   <SPAN class=keywordflow>return</SPAN> (stato&amp;0x1000)&amp;&amp;(ppp_code==2);
00407 }
00408 u_char RxLCPConfNackRej() {
00409   <SPAN class=keywordflow>return</SPAN> (stato&amp;0x1000)&amp;&amp;(ppp_code&gt;2);
00410 }
00411 <SPAN class=keywordtype>void</SPAN> TxPAPConfReq() {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -