Mikrotik SwOS: Creación de VLANs

Creación de las VLAN

Lo primero que hay que hacer es entrar en la pestaña de VLANs y crear todas las que necesitemos en el switch. Marcar los puertos que necesitemos y dejar el resto como not in group.

Reglas de aceptación

En la pestaña VLAN definimos el modo de aceptación de los paquetes, podemos:
1. Aceptar los tageados.
2. Drop los no tageados.
3. Remarcar los paquetes con una VLAN diferente.
4. Aceptar los no tageados en una VLAN.

Crear puerto de trunk

  1. Definit todas las VLANs que tengan que pasar en la pestaña VLANs.
  2. En la pestaña VLAN poner el puerto como enable o algún derivado.

Crear puerto access (para tagear)

  1. Setear la Default VLAN ID a la VLAN con la que queramos tagear.
  2. Poner el modo como strict.
  3. Poner el VLAN headercomo add if is missing.

Fuentes:
Wiki mikrotik
Greg Sowell

Mikrotik SwOS: Traducción del manual VLAN

El manual de mikrotik es un poco críptico en el caso de la pestaña de configuración de puertos y VLAN del SwOS. Tal vez esta traducción sirva de ayuda en caso de duda.

Cuando se menciona tabla VLAN se refiere a la pestaña VLANs donde debemos crear cada una de las VLANs que queremos usar en el switch. La política básica será dejar leave as is en los puertos de trunk y en los que queramos dejar pasar los paquetes marcados y not a member en el resto.

VLAN

Ingress (Entrada de paquetes)

VLAN Mode

Disabled

  1. La tabla VLAN no se usa.
  2. Ignora la VLAN de los paquetes marcados.

Optional

  1. Si la VLAN del paquete no está en la tabla de VLANs, estos se tratan como si no tuvieran VLAN.

Enabled

  1. A los paquetes que llegan sin VLAN se les pone el Default VLAN ID.
  2. De los que llegan con VLAN, borra aquellos con una VLAN que no esté presente en la tabla de VLANs.

Strict

  1. A los paquetes que llegan sin VLAN se les pone el Default VLAN ID.
  2. De los que llegan con VLAN, borra aquellos con una VLAN que no esté presente en la tabla de VLANs.
  3. Borra los paquetes con VLAN y puerto que no estén en la tabla de VLANs.

VLAN Receive

Esta regla va después del mode. Define si el paquete debe ser aceptado según sea any / only tagged / only untagged.

Default VLAN ID

Los paquetes que lleguen sin tag serán tratados como si estuvieran marcados con esta VLAN (sirve para conectar dispositivos que no tageen tales como ordenadores, tablets, etc).
Esta VLAN ID será añadida al paquete saliente sólo si está marcada la opción add if is missing especificada en el puerto de salida.

Force VLAN ID

Si deben marcarse con la Default VLAN ID todos los paquetes en la entrada.

Egress (Salida de paquetes)

VLAN Header

Define qué debemos hacer con la cabecera de los paquetes a la salida. En la cabecera es donde marcamos la pertenencia a una VLAN.

leave as is

Si el paquete viene marcado con VLAN, lo dejamos tal y como está.

always strip

Si el paquete viene marcado, se quita la VLAN de la cabecera.

add if missing

Si la VLAN no está marcado con VLAN, se añade la Default VLAN ID a la cabecera.

Preparado por:
Pere Vilás
Víctor Valverde

Parámetros por defecto en Javascript

Ya sabemos que las funciones en Javascript no son otra cosa que un objeto Function. El resultado de la evaluación del cuerpo de ese objeto es lo que en otros lenguajes llamamos el resultado de la ejecución de la función.

También sabemos que los “parámetros” del objeto Function son, a su vez, objetos. Esto es tan cierto que podemos pasar otra función (otro objeto Function) como parámetro.

Un pequeño inconveniente de esta falta de tipado es que si no pasamos ningún argumento la referencia al objeto pasado queda con el valor especial undefined. Para dar un valor por defecto al objeto pasado podemos hacer:

function myFunction(param) {
// comprobamos que el objeto param esté definido
if (param === undefined) {
param = 0; // le asignamos la primitiva int con valor cero
}
}

o bien, más corto:

function myFunction(param) {
param = param || 0;
}

Written with StackEdit.

Javascript herencia con factoría de objetos

Javascript no tiene un soporte claro para la herencia. Tal vez sea debido a que no existe el concepto de clase. En los lenguajes tradicionales, solemos definir la clase como una plantilla de cómo debe ser el objeto y después instanciamos a partir de esa definición.

Además, en Javascript todo es un objeto dinámico. En cualquier momento podemos añadir, quitar o cambiar cualquier propiedad de un objeto sin preocuparnos de la pertenencia a una clase o la necesidad de convertir entre clases.

Si lo que deseamos es la funcionalidad que nos otorga la herencia y preferimos el estilo de construcción de factoría de objetos, es decir, un objeto Function que nos retorna otro objeto con sus propiedades es muy fácil implementar la herencia y la sobreeescritura.

Pongo un ejemplo que se explica por si mismo:

"use strict";

// el objeto base
var Familia=function(fam) {
var obj={};
obj.familia=fam;

// Function en el objeto base
obj.tienePatas=function() {
return (obj.familia==="Hominidae")? true: false;
};

// sobreescritura de Object.toString()
obj.toString=function() {
console.log("FAMILIA ============");
console.log("Familia:", obj.familia);
};

return obj;
};

// objeto que hereda
var Genero=function(fam, gen) {

// obj es una Familia
// "heredamos" en Genero sus propiedades...
var obj=Familia(fam);

// ... y añadimos una propiedad nueva
obj.genero=gen;

// sobreescribimos (otra vez) toString
obj.toString=function() {
console.log("FAMILIA Y GENERO ============");
console.log("Familia:", obj.familia, "Genero:", obj.genero);
};

return obj;
};

// creamos nuevo objeto Familia
var monos=Familia("Hominidae");
monos.toString(); // Hominidae
console.log(monos.tienePatas()); // true

// creamos nuevo objeto Genero
var hombre=Genero("Hominidae", "Homo");
hombre.toString(); // Hominidae Homo
console.log(hombre.tienePatas()); // true

Este método es muy fácil y cómodo pero si tenemos que crear grandes cantidades de objetos es preferible usar prototype ya que ahorra gran cantidad de espacio en memoria.

Written with StackEdit.