📄 arp.lst
字号:
175:net/arp.c **** }
176:net/arp.c ****
177:net/arp.c **** //show tale
178:net/arp.c **** //arp_print_table();
179:net/arp.c **** }
180:net/arp.c **** }
181:net/arp.c ****
182:net/arp.c **** int arp_add_mac2ip(unsigned char *buffer, unsigned long ip){
183:net/arp.c **** unsigned char c;
184:net/arp.c **** int res;
185:net/arp.c ****
186:net/arp.c **** #if ARP_DEBUG
187:net/arp.c **** softuart_puts_progmem("ARP : adding ip ");
188:net/arp.c **** softuart_put_ip(ip);
189:net/arp.c **** softuart_puts_progmem(" to mac table");
190:net/arp.c **** softuart_putnewline();
191:net/arp.c **** #endif
192:net/arp.c ****
193:net/arp.c **** //set ip
194:net/arp.c **** arp_table[arp_table_pointer].ip = ip;
195:net/arp.c ****
196:net/arp.c **** //set mac:
197:net/arp.c **** for (c=0; c<6; c++){
198:net/arp.c **** arp_table[arp_table_pointer].mac[c] = buffer[c];
199:net/arp.c **** }
200:net/arp.c ****
201:net/arp.c **** res = arp_table_pointer;
202:net/arp.c ****
203:net/arp.c **** //update ringbuffer pointer
204:net/arp.c **** arp_table_pointer++;
205:net/arp.c **** if (arp_table_pointer >= ARP_TABLE_SIZE)
206:net/arp.c **** arp_table_pointer=0;
207:net/arp.c ****
208:net/arp.c **** return res;
209:net/arp.c **** }
210:net/arp.c ****
211:net/arp.c **** //send an arp request
212:net/arp.c **** void arp_send_request(unsigned char *buffer, uint32_t *dest_ip){
213:net/arp.c **** unsigned char c;
214:net/arp.c ****
215:net/arp.c **** //generate ethernet packet:
216:net/arp.c **** for (c=0; c<6; c++){
217:net/arp.c **** //set destination mac address:
218:net/arp.c **** buffer[c] = 0xFF; //BROADCAST!
219:net/arp.c **** //set source mac address:
220:net/arp.c **** buffer[c+6] = nic_mac[c];
221:net/arp.c **** }
222:net/arp.c ****
223:net/arp.c **** //set ethernet packettype to ARP
259 gue: function */
260 /* frame size = 0 */
261 /* epilogue start */
263 .LM14:
264 ret
224:net/arp.c **** dress:
225:net/arp.c **** buffer[c+6] = nic_mac[c];
226:net/arp.c **** }
227:net/arp.c ****
228:net/arp.c **** //set ethernet packettype to ARP
229:net/arp.c **** buffer[12] = 0x08;
230:net/arp.c **** buffer[13] = 0x06;
231:net/arp.c ****
232:net/arp.c **** //set hardware type to ethernet:
233:net/arp.c **** buffer[ARP_POS_HARDWARE_TYPE+0] = 0x00;
234:net/arp.c **** buffer[ARP_POS_HARDWARE_TYPE+1] = 0x01;
235:net/arp.c ****
236:net/arp.c **** //set protocol to IP:
237:net/arp.c **** buffer[ARP_POS_PROTOCOL+0] = 0x08;
238:net/arp.c **** buffer[ARP_POS_PROTOCOL+1] = 0x00;
239:net/arp.c ****
240:net/arp.c **** //set hw size:
241:net/arp.c **** buffer[ARP_POS_HARDWARE_SIZE] = 0x06;
242:net/arp.c ****
243:net/arp.c **** //set protocol size
244:net/arp.c **** buffer[ARP_POS_PROTOCOL_SIZE] = 0x04;
245:net/arp.c ****
246:net/arp.c **** //set ARP type to REQUEST
247:net/arp.c **** buffer[ARP_POS_OP+0] = ARP_OP_REQUEST>>8;
248:net/arp.c **** buffer[ARP_POS_OP+1] = ARP_OP_REQUEST;
249:net/arp.c ****
265 arp_print_table, .-arp_print_table
266 .Lscope3:
269 .global arp_search_by_ip
271 arp_search_by_ip:
273 .LM15:
274 .LFBB4:
250:net/arp.c **** EQUEST>>8;
251:net/arp.c **** buffer[ARP_POS_OP+1] = ARP_OP_REQUEST;
275 e: function */
276 /* frame size = 0 */
277 movw r20,r22
278 movw r22,r24
280 00ec AB01 .LM16:
281 00ee BC01 ldi r30,lo8(arp_table)
282 ldi r31,hi8(arp_table)
283 ldi r18,lo8(0)
284 00f0 E0E0 ldi r19,hi8(0)
285 00f2 F0E0 .L12:
287 00f6 30E0 .LM17:
288 ld r24,Z
252:net/arp.c **** _REQUEST>>8;
253:net/arp.c **** buffer[ARP_POS_OP+1] = ARP_OP_REQUEST;
254:net/arp.c ****
289 ldd r26,Z+2
290 ldd r27,Z+3
291 00f8 8081 cp r24,r20
292 00fa 9181 cpc r25,r21
293 00fc A281 cpc r26,r22
294 00fe B381 cpc r27,r23
295 0100 8417 breq .L11
297 0104 A607 .LM18:
298 0106 B707 subi r18,lo8(-(1))
299 0108 01F0 sbci r19,hi8(-(1))
300 adiw r30,10
301 cpi r18,4
302 010a 2F5F cpc r19,__zero_reg__
303 010c 3F4F brne .L12
304 010e 3A96 ldi r18,lo8(-1)
305 0110 2430 ldi r19,hi8(-1)
306 0112 3105 .L11:
308 0116 2FEF .LM19:
309 0118 3FEF movw r24,r18
310 /* epilogue start */
255:net/arp.c **** EQUEST>>8;
256:net/arp.c **** buffer[ARP_POS_OP+1] = ARP_OP_REQUEST;
257:net/arp.c ****
258:net/arp.c **** //setup sender mac & ip:
259:net/arp.c **** nic_copy_mac_to_buf(&buffer[ARP_POS_SRC_MAC]);
311 _by_ip, .-arp_search_by_ip
315 011c 0895 .Lscope4:
319 .global arp_send_request
321 arp_send_request:
323 .LM20:
324 .LFBB5:
325 push r14
326 push r15
327 push r16
328 push r17
329 push r28
330 011e EF92 push r29
331 0120 FF92 /* prologue: function */
332 0122 0F93 /* frame size = 0 */
333 0124 1F93 movw r28,r24
334 0126 CF93 movw r14,r22
336 .LM21:
337 movw r16,r24
338 012a EC01 ldi r26,lo8(nic_mac)
339 012c 7B01 ldi r27,hi8(nic_mac)
340 movw r30,r24
342 012e 8C01 .LM22:
343 0130 A0E0 ldi r25,lo8(-1)
344 0132 B0E0 .L16:
345 0134 FC01 st Z,r25
347 .LM23:
348 0136 9FEF ld r24,X+
349 std Z+6,r24
350 0138 9083 adiw r30,1
352 .LM24:
353 013a 8D91 ldi r24,hi8(nic_mac+6)
354 013c 8683 cpi r26,lo8(nic_mac+6)
355 013e 3196 cpc r27,r24
356 brne .L16
358 0140 80E0 .LM25:
359 0142 A030 ldi r24,lo8(8)
360 0144 B807 std Y+12,r24
362 .LM26:
363 ldi r25,lo8(6)
364 0148 88E0 std Y+13,r25
366 .LM27:
367 std Y+14,__zero_reg__
369 014e 9D87 .LM28:
370 ldi r18,lo8(1)
371 std Y+15,r18
373 .LM29:
374 std Y+16,r24
376 0154 2F87 .LM30:
377 std Y+17,__zero_reg__
379 0156 888B .LM31:
380 std Y+18,r25
382 0158 198A .LM32:
383 ldi r24,lo8(4)
384 std Y+19,r24
386 .LM33:
387 std Y+20,__zero_reg__
389 015e 8B8B .LM34:
390 std Y+21,r18
392 0160 1C8A .LM35:
393 movw r24,r28
394 adiw r24,22
395 0162 2D8B call nic_copy_mac_to_buf
397 .LM36:
398 0164 CE01 lds r20,nic_ip
399 0166 4696 lds r21,(nic_ip)+1
400 0168 0E94 0000 lds r22,(nic_ip)+2
401 lds r23,(nic_ip)+3
402 movw r24,r28
403 016c 4091 0000 adiw r24,28
404 0170 5091 0000 call nic_ip_to_buffer
405 0174 6091 0000 ldi r24,lo8(0)
407 017c CE01 .LM37:
408 017e 4C96 ldi r25,lo8(-1)
409 0180 0E94 0000 .L17:
410 0184 80E0 movw r30,r16
411 std Z+32,r25
413 0186 9FEF .LM38:
414 subi r24,lo8(-(1))
415 0188 F801 subi r16,lo8(-(1))
416 018a 90A3 sbci r17,hi8(-(1))
417 cpi r24,lo8(6)
418 brne .L17
420 018e 0F5F .LM39:
421 0190 1F4F movw r30,r14
422 0192 8630 ld r20,Z
423 0194 01F4 ldd r21,Z+1
424 ldd r22,Z+2
425 ldd r23,Z+3
426 0196 F701 movw r24,r28
427 0198 4081 adiw r24,38
428 019a 5181 call nic_ip_to_buffer
430 019e 7381 .LM40:
431 01a0 CE01 movw r24,r28
432 01a2 8696 ldi r22,lo8(42)
433 01a4 0E94 0000 ldi r23,hi8(42)
434 call nic_send_packet
435 /* epilogue start */
437 01aa 6AE2 .LM41:
438 01ac 70E0 pop r29
439 01ae 0E94 0000 pop r28
440 pop r17
441 pop r16
442 pop r15
443 01b2 DF91 pop r14
444 01b4 CF91 ret
449 01be 0895 .Lscope5:
453 .global arp_packet_in
455 arp_packet_in:
457 .LM42:
458 .LFBB6:
459 push r2
460 push r3
461 push r4
462 push r5
463 push r6
464 01c0 2F92 push r7
465 01c2 3F92 push r8
466 01c4 4F92 push r9
467 01c6 5F92 push r10
468 01c8 6F92 push r11
469 01ca 7F92 push r12
470 01cc 8F92 push r13
471 01ce 9F92 push r14
472 01d0 AF92 push r15
473 01d2 BF92 push r16
474 01d4 CF92 push r17
475 01d6 DF92 push r28
476 01d8 EF92 push r29
477 01da FF92 /* prologue: function */
478 01dc 0F93 /* frame size = 0 */
479 01de 1F93 movw r12,r24
480 01e0 CF93 movw r2,r22
482 .LM43:
483 ldi r31,lo8(28)
484 01e4 6C01 mov r6,r31
485 01e6 1B01 mov r7,__zero_reg__
486 add r6,r24
487 adc r7,r25
488 01e8 FCE1 movw r24,r6
489 01ea 6F2E call nic_buffer_to_ip
490 01ec 712C movw r8,r22
491 01ee 680E movw r10,r24
493 01f2 C301 .LM44:
494 01f4 0E94 0000 ldi r30,lo8(38)
495 01f8 4B01 mov r4,r30
496 01fa 5C01 mov r5,__zero_reg__
497 add r4,r12
498 adc r5,r13
499 01fc E6E2 movw r24,r4
500 01fe 4E2E call nic_buffer_to_ip
501 0200 512C movw r14,r22
502 0202 4C0C movw r16,r24
504 0206 C201 .LM45:
505 0208 0E94 0000 movw r24,r12
506 020c 7B01 call nic_buffer_to_unsigned_int
507 020e 8C01 sbiw r24,1
508 breq .+2
509 rjmp .L22
511 0212 0E94 0000 .LM46:
512 0216 0197 lds r24,nic_ip
513 0218 01F0 lds r25,(nic_ip)+1
514 021a 00C0 lds r26,(nic_ip)+2
515 lds r27,(nic_ip)+3
516 cp r14,r24
517 021c 8091 0000 cpc r15,r25
518 0220 9091 0000 cpc r16,r26
519 0224 A091 0000 cpc r17,r27
520 0228 B091 0000 breq .+2
521 022c E816 rjmp .L34
522 022e F906 ldi r30,lo8(arp_table)
523 0230 0A07 ldi r31,hi8(arp_table)
524 0232 1B07 ldi r18,lo8(0)
525 0234 01F0 ldi r19,hi8(0)
526 0236 00C0 .L25:
527 0238 E0E0 .LBB9:
528 023a F0E0 .LBB10:
530 023e 30E0 .LM47:
531 ld r24,Z
532 ldd r25,Z+1
533 ldd r26,Z+2
534 ldd r27,Z+3
535 cp r24,r8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -