Make <link>, print-link and get-links public and document them.
doc/guile-netlink.texi
| 483 | 483 | network links on your machine. They are equivalent to the @command{ip link} | |
| 484 | 484 | family of commands, from @code{iproute2}. | |
| 485 | 485 | ||
| 486 | + | @deffn {Datatype} <link> | |
| 487 | + | ||
| 488 | + | Datatype representing the status of a network link. | |
| 489 | + | ||
| 490 | + | get-links | |
| 491 | + | print-link | |
| 492 | + | ||
| 493 | + | <link> make-link link? | |
| 494 | + | link-name link-id link-type link-flags link-mtu link-qdisc | |
| 495 | + | link-state link-mode link-group link-qlen link-addr link-brd | |
| 496 | + | ||
| 497 | + | @table @asis | |
| 498 | + | @item @code{name} | |
| 499 | + | Name of the link, such as @code{"enp1s0"}. | |
| 500 | + | ||
| 501 | + | @item @code{id} | |
| 502 | + | Index of the link, a unique number used to identify the link. | |
| 503 | + | ||
| 504 | + | @item @code{type} | |
| 505 | + | Type of the link, as an integer. | |
| 506 | + | ||
| 507 | + | @item @code{flags} | |
| 508 | + | Flags associated with the device, as a list of symbols, such as | |
| 509 | + | @code{'(UP LOOPBACK)}. | |
| 510 | + | ||
| 511 | + | @item @code{mtu} | |
| 512 | + | MTU of the link, as an integer. | |
| 513 | + | ||
| 514 | + | @item @code{qdisc} | |
| 515 | + | Queuing discipline of the link, as a string, such as @code{"noqueue"}. | |
| 516 | + | ||
| 517 | + | @item @code{state} | |
| 518 | + | State of the link, as an integer. Use @code{int->operstate} from | |
| 519 | + | @code{(netlink constant)} to get a symbol, such as @code{IF_OPER_UP}. | |
| 520 | + | ||
| 521 | + | @item @code{mode} | |
| 522 | + | Mode of the link. 0 means @code{DORMANT}, 1 means @code{DEFAULT}. | |
| 523 | + | ||
| 524 | + | @item @code{group} | |
| 525 | + | Identifier of the group it belongs to. 0 for @code{default}. | |
| 526 | + | ||
| 527 | + | @item @code{qlen} | |
| 528 | + | Size of the queue. | |
| 529 | + | ||
| 530 | + | @item @code{addr} | |
| 531 | + | Ethernet address of the link, as a string. | |
| 532 | + | ||
| 533 | + | @item @code{brd} | |
| 534 | + | Broadcast (ethernet) address of the link, as a string. | |
| 535 | + | ||
| 536 | + | @end table | |
| 537 | + | @end deffn | |
| 538 | + | ||
| 539 | + | @deffn {Scheme Procedure} get-links | |
| 540 | + | Returns the list of existing links in the system, as a list of @code{<link>} | |
| 541 | + | objects. | |
| 542 | + | @end deffn | |
| 543 | + | ||
| 544 | + | @deffn {Sceme Procedure} print-link @var{link} | |
| 545 | + | Display @var{link} on the standard output, using a format similar to | |
| 546 | + | @command{ip link} from @code{iproute2}. | |
| 547 | + | @end deffn | |
| 548 | + | ||
| 486 | 549 | @deffn {Scheme Procedure} link-set @var{device} [#:up @code{#f}] @ | |
| 487 | 550 | [#:down @code{#f}] [#:type @code{#f}] [#:arp-on @code{#f}] @ | |
| 488 | 551 | [#:arp-off @code{#f}] [#:dynamic-on @code{#f}] [#:dynamic-off @code{#f}] @ |
ip/link.scm
| 32 | 32 | link-del | |
| 33 | 33 | link-set | |
| 34 | 34 | link-show | |
| 35 | - | link-name->index)) | |
| 35 | + | link-name->index | |
| 36 | + | get-links | |
| 37 | + | print-link | |
| 38 | + | ||
| 39 | + | <link> make-link link? | |
| 40 | + | link-name link-id link-type link-flags link-mtu link-qdisc | |
| 41 | + | link-state link-mode link-group link-qlen link-addr link-brd)) | |
| 36 | 42 | ||
| 37 | 43 | (define-record-type <link> | |
| 38 | 44 | (make-link name id type flags mtu qdisc state mode group qlen addr brd) | |
… | |||
| 109 | 115 | (close-socket sock) | |
| 110 | 116 | links))) | |
| 111 | 117 | ||
| 118 | + | (define print-link | |
| 119 | + | (match-lambda | |
| 120 | + | (($ <link> name id type flags mtu qdisc state mode group qlen addr brd) | |
| 121 | + | (format #t "~a: ~a: <~a>" id name | |
| 122 | + | (string-join | |
| 123 | + | (map | |
| 124 | + | (lambda (s) | |
| 125 | + | ;; IFF_UP -> UP | |
| 126 | + | (substring (symbol->string s) 4)) | |
| 127 | + | flags) | |
| 128 | + | ",")) | |
| 129 | + | (when mtu | |
| 130 | + | (format #t " mtu ~a" mtu)) | |
| 131 | + | (when qdisc | |
| 132 | + | (format #t " qdisc ~a" qdisc)) | |
| 133 | + | (when state | |
| 134 | + | (format #t " state ~a" | |
| 135 | + | (substring (symbol->string (int->operstate state)) 8))) | |
| 136 | + | (when mode | |
| 137 | + | (format #t " mode ~a" (match mode (0 "DEFAULT") (1 "DORMANT")))) | |
| 138 | + | (when group | |
| 139 | + | (format #t " group ~a" (match group (0 "DEFAULT")))) | |
| 140 | + | (when qlen | |
| 141 | + | (format #t " qlen ~a" qlen)) | |
| 142 | + | (newline) | |
| 143 | + | (cond | |
| 144 | + | ((equal? type ARPHRD_ETHER) | |
| 145 | + | (format #t " link/ether ~a brd ~a~%" addr brd)) | |
| 146 | + | ((equal? type ARPHRD_LOOPBACK) | |
| 147 | + | (format #t " link/loopback ~a brd ~a~%" addr brd)))))) | |
| 148 | + | ||
| 112 | 149 | (define* (link-show #:key (device #f) (group #f) (up #f) (master #f) (vrf #f) | |
| 113 | 150 | (type #f)) | |
| 114 | 151 | "Return a list whose elements represent the data about the links. If a key | |
| 115 | 152 | is given, the resulting list is limited to those elements that match the given | |
| 116 | 153 | criteria." | |
| 117 | - | (define print-link | |
| 118 | - | (match-lambda | |
| 119 | - | (($ <link> name id type flags mtu qdisc state mode group qlen addr brd) | |
| 120 | - | (format #t "~a: ~a: <~a>" id name | |
| 121 | - | (string-join | |
| 122 | - | (map | |
| 123 | - | (lambda (s) | |
| 124 | - | ;; IFF_UP -> UP | |
| 125 | - | (substring (symbol->string s) 4)) | |
| 126 | - | flags) | |
| 127 | - | ",")) | |
| 128 | - | (when mtu | |
| 129 | - | (format #t " mtu ~a" mtu)) | |
| 130 | - | (when qdisc | |
| 131 | - | (format #t " qdisc ~a" qdisc)) | |
| 132 | - | (when state | |
| 133 | - | (format #t " state ~a" | |
| 134 | - | (substring (symbol->string (int->operstate state)) 8))) | |
| 135 | - | (when mode | |
| 136 | - | (format #t " mode ~a" (match mode (0 "DEFAULT") (1 "DORMANT")))) | |
| 137 | - | (when group | |
| 138 | - | (format #t " group ~a" (match group (0 "DEFAULT")))) | |
| 139 | - | (when qlen | |
| 140 | - | (format #t " qlen ~a" qlen)) | |
| 141 | - | (newline) | |
| 142 | - | (cond | |
| 143 | - | ((equal? type ARPHRD_ETHER) | |
| 144 | - | (format #t " link/ether ~a brd ~a~%" addr brd)) | |
| 145 | - | ((equal? type ARPHRD_LOOPBACK) | |
| 146 | - | (format #t " link/loopback ~a brd ~a~%" addr brd)))))) | |
| 147 | - | ||
| 148 | 154 | (for-each | |
| 149 | 155 | (lambda (link) | |
| 150 | 156 | (match link | |