Resumo

  • Uma conexão Click registra uma rota possível de entrega do pacote. Não prova uma travessia real nem informa, sozinha, qual extremidade iniciou a transferência.
  • No push, a fonte faz o controle avançar. No pull, o destino envia o pedido para trás e recebe um pacote que continua no sentido da seta. Uma Queue explícita faz a passagem entre os dois regimes.
  • A configuração é uma superfície legível de responsabilidades, mas tipos de porta, inicialização, ocupação, decisão do scheduler, conclusão do dispositivo e recepção continuam sendo comprovantes distintos.

O desenho não continha o verbo inteiro

Click monta um roteador com elementos pequenos. Ler uma interface, validar cabeçalhos, procurar uma rota, classificar, contar, enfileirar e transmitir podem ocupar caixas diferentes. O operador liga essas caixas num grafo dirigido.

No artigo ampliado de 2000, Eddie Kohler, Robert Morris, Benjie Chen, John Jannotti e M. Frans Kaashoek chamam cada ligação de caminho possível para a transferência de pacotes. A qualificação protege o significado. Uma ligação configurada não é a gravação de um pacote que passou. E uma seta de A para B não determina que A iniciou todas as chamadas.

O contrato das portas completa o verbo. O grafo diz para onde o pacote pode ir; push ou pull diz de onde parte a iniciativa. Se o sistema de observabilidade guarda apenas a seta, pode atribuir ao produtor uma espera criada pelo consumidor ou anunciar uma ramificação permitida como se tivesse sido executada.

Push responde ao que chegou

Uma interface de entrada recebe tráfego sem consulta prévia ao grafo. Seu elemento inicia push e chama o próximo. Controle e pacote caminham juntos por elementos sucessivos, até o pacote ser consumido, descartado ou armazenado.

Iniciar não é comandar o restante. Um classificador escolhe outra saída, uma checagem rejeita o conteúdo e uma fila cheia deixa de aceitar. O contador do dispositivo de entrada é prova da chegada local; não é recibo do dispositivo de saída.

Uma reconstrução precisa amarrar evento de recepção, configuração ativa, elemento chamador, ramo efetivo e resultado em cada fronteira importante. Totais agregados podem ser próximos, mas proximidade numérica não cria a identidade que faltou.

Pull responde ao que pode sair

Na transmissão, a disponibilidade nasce na outra ponta. O hardware pede o próximo pacote quando está pronto. O elemento de destino faz pull; a solicitação corre no sentido contrário ao grafo até uma fonte devolver um pacote ou informar que nada está disponível.

A tese de Kohler separa os movimentos: no push, o fluxo de controle começa na recepção e segue para a frente; no pull, começa na transmissão e volta; o pacote sempre segue para a frente. A mesma seta admite duas histórias de chamada.

O mecanismo permite compor schedulers. Um elemento com várias entradas pull e uma saída pull recebe a demanda de baixo, escolhe uma entrada e pergunta a ela. A posição do scheduler localiza a decisão, mas suas linhas não revelam a escolha de um evento, o motivo, o vazio de uma fila ou a fome de outra.

Queue: o lugar onde um relógio espera o outro

No caminho mais simples, uma Queue fica entre a região de recepção em push e a região de transmissão em pull. Pacotes entram empurrados e aguardam em FIFO. Quando o transmissor tem capacidade, puxa a saída e obtém o primeiro.

Tornar a fila um elemento é reconhecer que chegada e serviço não compartilham o mesmo relógio. Algum componente precisa assumir o intervalo. Click dá a esse estado um nome, portas, limite e possibilidade de inspeção.

O recibo continua local. Enqueue confirma aceitação por aquela fila em memória, sob aquela configuração. Não garante persistência após pane, atraso máximo, escolha futura, transmissão física ou recepção distante. Dequeue confirma a saída da fila, não o destino do pacote depois dela.

FIFO tampouco resolve a justiça geral. Várias filas podem alimentar um scheduler, perdas podem acontecer antes, e notificações, lotes e prontidão da interface alteram o momento do pull. A explicitação melhora a pergunta; não transforma uma etapa em resposta total.

Um erro que o tipo de porta consegue barrar

Uma porta ativa é push, pull ou agnóstica. Duas portas push estabelecem conexão push; duas pull, conexão pull. Conectar push diretamente a pull é ilegal. A porta agnóstica assume o comportamento compatível do vizinho.

Esse acordo pequeno funciona como especificação comum mínima. Autores independentes criam elementos sem uma autoridade permanente escolhendo todas as composições. Ainda assim, os lados precisam concordar sobre quem pode iniciar a passagem. O desacordo é verificável e pode ser rejeitado durante a inicialização.

O arquivo aprovado não equivale ao roteador adotado. O trabalho sobre SMP Click descreve parse, criação, tentativa de inicialização e somente depois instalação e início, caso tudo funcione. Repositório, diagrama, parse e datapath em produção são estados diferentes.

A otimização exige uma linha de descendência

Muitos elementos trazem flexibilidade e também chamadas extras. Kohler, Morris e Chen usaram técnicas de compiladores para otimizar configurações inteiras. Outras ferramentas especializam classificadores, eliminam trechos mortos, removem chamadas virtuais, conferem alinhamento e juntam definições.

Por isso, cada seta lógica não precisa sobreviver como uma chamada distinta no executável. Para uma auditoria, o grafo de autoria explica a intenção e as responsabilidades; configuração transformada, código gerado, build e instância instalada provam a adoção.

Sem genealogia, o diagrama vira uma falsa trace. No extremo oposto, o binário parece um artefato sem explicação, embora tenha origem declarativa. Primazia do código em execução significa preservar a passagem entre especificação e operação, não escolher apenas um lado.

A autoria também tem várias portas

A página oficial de Harvard lista Click entre os projetos de Kohler. O nome aparece primeiro no artigo de revista, e a tese de doutorado desenvolve arquitetura e ferramentas. Mas o próprio registro mostra colaboração: Morris, Chen, Jannotti e Kaashoek dividem o artigo; Massimiliano Poletto participa do relatório de linguagem; muitos outros aparecem no histórico do software.

Concentrar o sistema numa biografia solitária repetiria o erro da seta. O mérito de Kohler fica mais nítido quando descrito como método coletivo: tornar responsabilidades pequenas e combináveis, declarar o lado que chama e deixar a execução produzir o recibo final.

Fontes