Lines Matching +full:1 +full:p
58 rose->va = (rose->va + 1) % ROSE_MODULUS; in rose_frames_acked()
91 if (nr == vc) return 1; in rose_validate_nr()
92 vc = (vc + 1) % ROSE_MODULUS; in rose_validate_nr()
112 reserve = AX25_BPQ_HEADER_LEN + AX25_MAX_HEADER_LEN + 1; in rose_write_internal()
117 len += 1 + ROSE_ADDR_LEN + ROSE_ADDR_LEN; in rose_write_internal()
235 *ns = (frame[2] >> 1) & 0x07; in rose_decode()
242 static int rose_parse_national(unsigned char *p, struct rose_facilities_struct *facilities, int len) in rose_parse_national() argument
249 switch (*p & 0xC0) { in rose_parse_national()
252 return -1; in rose_parse_national()
253 p += 2; in rose_parse_national()
260 return -1; in rose_parse_national()
261 if (*p == FAC_NATIONAL_RAND) in rose_parse_national()
262 facilities->rand = ((p[1] << 8) & 0xFF00) + ((p[2] << 0) & 0x00FF); in rose_parse_national()
263 p += 3; in rose_parse_national()
270 return -1; in rose_parse_national()
271 p += 4; in rose_parse_national()
278 return -1; in rose_parse_national()
279 l = p[1]; in rose_parse_national()
281 return -1; in rose_parse_national()
282 if (*p == FAC_NATIONAL_DEST_DIGI) { in rose_parse_national()
285 return -1; in rose_parse_national()
286 memcpy(&facilities->source_digis[0], p + 2, AX25_ADDR_LEN); in rose_parse_national()
287 facilities->source_ndigis = 1; in rose_parse_national()
290 else if (*p == FAC_NATIONAL_SRC_DIGI) { in rose_parse_national()
293 return -1; in rose_parse_national()
294 memcpy(&facilities->dest_digis[0], p + 2, AX25_ADDR_LEN); in rose_parse_national()
295 facilities->dest_ndigis = 1; in rose_parse_national()
298 else if (*p == FAC_NATIONAL_FAIL_CALL) { in rose_parse_national()
300 return -1; in rose_parse_national()
301 memcpy(&facilities->fail_call, p + 2, AX25_ADDR_LEN); in rose_parse_national()
303 else if (*p == FAC_NATIONAL_FAIL_ADD) { in rose_parse_national()
304 if (l < 1 + ROSE_ADDR_LEN) in rose_parse_national()
305 return -1; in rose_parse_national()
306 memcpy(&facilities->fail_addr, p + 3, ROSE_ADDR_LEN); in rose_parse_national()
308 else if (*p == FAC_NATIONAL_DIGIS) { in rose_parse_national()
310 return -1; in rose_parse_national()
311 fac_national_digis_received = 1; in rose_parse_national()
314 for (pt = p + 2, lg = 0 ; lg < l ; pt += AX25_ADDR_LEN, lg += AX25_ADDR_LEN) { in rose_parse_national()
317 return -1; in rose_parse_national()
321 return -1; in rose_parse_national()
326 p += l + 2; in rose_parse_national()
331 } while (*p != 0x00 && len > 0); in rose_parse_national()
336 static int rose_parse_ccitt(unsigned char *p, struct rose_facilities_struct *facilities, int len) in rose_parse_ccitt() argument
342 switch (*p & 0xC0) { in rose_parse_ccitt()
345 return -1; in rose_parse_ccitt()
346 p += 2; in rose_parse_ccitt()
353 return -1; in rose_parse_ccitt()
354 p += 3; in rose_parse_ccitt()
361 return -1; in rose_parse_ccitt()
362 p += 4; in rose_parse_ccitt()
369 return -1; in rose_parse_ccitt()
370 l = p[1]; in rose_parse_ccitt()
374 return -1; in rose_parse_ccitt()
376 if (*p == FAC_CCITT_DEST_NSAP) { in rose_parse_ccitt()
377 memcpy(&facilities->source_addr, p + 7, ROSE_ADDR_LEN); in rose_parse_ccitt()
378 memcpy(callsign, p + 12, l - 10); in rose_parse_ccitt()
382 if (*p == FAC_CCITT_SRC_NSAP) { in rose_parse_ccitt()
383 memcpy(&facilities->dest_addr, p + 7, ROSE_ADDR_LEN); in rose_parse_ccitt()
384 memcpy(callsign, p + 12, l - 10); in rose_parse_ccitt()
388 p += l + 2; in rose_parse_ccitt()
393 } while (*p != 0x00 && len > 0); in rose_parse_ccitt()
398 int rose_parse_facilities(unsigned char *p, unsigned packet_len, in rose_parse_facilities() argument
403 facilities_len = *p++; in rose_parse_facilities()
408 while (facilities_len >= 3 && *p == 0x00) { in rose_parse_facilities()
410 p++; in rose_parse_facilities()
412 switch (*p) { in rose_parse_facilities()
414 len = rose_parse_national(p + 1, facilities, facilities_len - 1); in rose_parse_facilities()
418 len = rose_parse_ccitt(p + 1, facilities, facilities_len - 1); in rose_parse_facilities()
422 printk(KERN_DEBUG "ROSE: rose_parse_facilities - unknown facilities family %02X\n", *p); in rose_parse_facilities()
423 len = 1; in rose_parse_facilities()
431 facilities_len -= len + 1; in rose_parse_facilities()
432 p += len + 1; in rose_parse_facilities()
440 unsigned char *p = buffer + 1; in rose_create_facilities() local
446 if (rose->rand != 0 || rose->source_ndigis == 1 || rose->dest_ndigis == 1) { in rose_create_facilities()
447 *p++ = 0x00; in rose_create_facilities()
448 *p++ = FAC_NATIONAL; in rose_create_facilities()
451 *p++ = FAC_NATIONAL_RAND; in rose_create_facilities()
452 *p++ = (rose->rand >> 8) & 0xFF; in rose_create_facilities()
453 *p++ = (rose->rand >> 0) & 0xFF; in rose_create_facilities()
459 *p++ = FAC_NATIONAL_DIGIS; in rose_create_facilities()
460 *p++ = AX25_ADDR_LEN * (rose->source_ndigis + rose->dest_ndigis); in rose_create_facilities()
464 memcpy(p, &rose->source_digis[nb], AX25_ADDR_LEN); in rose_create_facilities()
465 p[6] |= AX25_HBIT; in rose_create_facilities()
466 p += AX25_ADDR_LEN; in rose_create_facilities()
471 memcpy(p, &rose->dest_digis[nb], AX25_ADDR_LEN); in rose_create_facilities()
472 p[6] &= ~AX25_HBIT; in rose_create_facilities()
473 p += AX25_ADDR_LEN; in rose_create_facilities()
479 *p++ = FAC_NATIONAL_SRC_DIGI; in rose_create_facilities()
480 *p++ = AX25_ADDR_LEN; in rose_create_facilities()
481 memcpy(p, &rose->source_digis[0], AX25_ADDR_LEN); in rose_create_facilities()
482 p += AX25_ADDR_LEN; in rose_create_facilities()
487 *p++ = FAC_NATIONAL_DEST_DIGI; in rose_create_facilities()
488 *p++ = AX25_ADDR_LEN; in rose_create_facilities()
489 memcpy(p, &rose->dest_digis[0], AX25_ADDR_LEN); in rose_create_facilities()
490 p += AX25_ADDR_LEN; in rose_create_facilities()
494 *p++ = 0x00; in rose_create_facilities()
495 *p++ = FAC_CCITT; in rose_create_facilities()
497 *p++ = FAC_CCITT_DEST_NSAP; in rose_create_facilities()
501 *p++ = strlen(callsign) + 10; in rose_create_facilities()
502 *p++ = (strlen(callsign) + 9) * 2; /* ??? */ in rose_create_facilities()
504 *p++ = 0x47; *p++ = 0x00; *p++ = 0x11; in rose_create_facilities()
505 *p++ = ROSE_ADDR_LEN * 2; in rose_create_facilities()
506 memcpy(p, &rose->dest_addr, ROSE_ADDR_LEN); in rose_create_facilities()
507 p += ROSE_ADDR_LEN; in rose_create_facilities()
509 memcpy(p, callsign, strlen(callsign)); in rose_create_facilities()
510 p += strlen(callsign); in rose_create_facilities()
512 *p++ = FAC_CCITT_SRC_NSAP; in rose_create_facilities()
516 *p++ = strlen(callsign) + 10; in rose_create_facilities()
517 *p++ = (strlen(callsign) + 9) * 2; /* ??? */ in rose_create_facilities()
519 *p++ = 0x47; *p++ = 0x00; *p++ = 0x11; in rose_create_facilities()
520 *p++ = ROSE_ADDR_LEN * 2; in rose_create_facilities()
521 memcpy(p, &rose->source_addr, ROSE_ADDR_LEN); in rose_create_facilities()
522 p += ROSE_ADDR_LEN; in rose_create_facilities()
524 memcpy(p, callsign, strlen(callsign)); in rose_create_facilities()
525 p += strlen(callsign); in rose_create_facilities()
527 len = p - buffer; in rose_create_facilities()
528 buffer[0] = len - 1; in rose_create_facilities()
545 if (cause != -1) in rose_disconnect()
548 if (diagnostic != -1) in rose_disconnect()